NSDateFormatter 尊重用户设置 - 没有分钟

NSDateFormatter respect user settings - no minutes

我正在尝试根据用户的偏好将给定的小时显示为 AM/PM 或 24 小时制。

我目前有:

+ (NSString *)formatWithTemplate:(NSString *)template {
    return [NSDateFormatter dateFormatFromTemplate:template options:0 locale:[NSLocale currentLocale]];
}

+ (NSString *)format:(NSDate *)date {
    [formatter setDateFormat:[MyFormatter formatWithTemplate:@"h a"]];
    [dateFormatter setDateStyle:NSDateFormatterShortStyle];
    [dateFormatter setTimeStyle:NSDateFormatterNoStyle];
    return [formatter stringFromDate:date];
}

用法示例:

如果使用 24 小时制,

[MyFormatter format:24] 将显示“24:00”,如果使用 12 小时制(在用户的设备设置中),则显示“12:00 PM”。

但是,对于 12 小时制,它一直显示:“12:00 PM”。有什么方法可以在尊重区域设置和用户设置的同时摆脱 :00 以使其显示:“12 PM”而不是“12:00 PM”?

当我使用:

[dateFormatter setDateStyle:NSDateFormatterShortStyle];
[dateFormatter setTimeStyle:NSDateFormatterNoStyle];

它尊重用户的设置但完全忽略我的格式。但是,如果我使用我的格式,它会忽略用户的设置。

有什么想法吗?

我会让用户设置为准。然后你已经有了一个从中获取字符串的方法。然后根据需要修改字符串。

既然你有信心,你只需要找到并替换字符串 ':00' 就可以了。这是非常简单的事情:

NSString *string = @"12:00 PM"; //get this from the `dateFormatter` `format:date` method you have
NSString *newString = [string stringByReplacingOccurrencesOfString:@":00" withString:@""];
NSLog(@"newString %@",newString);