1

我有一个应用程序让用户选择他们的语言,在选择语言后,它还会根据国家/地区的日期格式更改日期和时间。

我这样做是通过 NSDateFormatter.- [dateFormatter setDateFormat:.....]; 对于美国英语 - 我使用“h:mm a” - 显示上午/下午设置。

问题是:am pm 仅在我的 iPhone 处于 12 小时模式时显示,我想这是因为它会自动检查 iPhone 的时间格式,有没有办法覆盖它?上午/下午也将在 24 模式下显示。

4

3 回答 3

7

这对我有用:

dateFormatter.dateFormat = @"H:mm a";

例子:

// Set up formatter
NSDateFormatter *dateFormatter;
dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.dateFormat = @"H:mm a";

// Print test date
NSDate *date = [NSDate dateWithTimeIntervalSinceNow:8900];
NSLog(@"%@", [dateFormatter stringFromDate:date]);

输出:

14:23 PM
于 2012-10-13T09:59:08.520 回答
0
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setLocale:[NSLocale currentLocale]];
[formatter setDateStyle:NSDateFormatterNoStyle];
[formatter setTimeStyle:NSDateFormatterShortStyle];
[formatter setDateFormat:@"hh:mm:ss a"];
NSString *date = [formatter stringFromDate:[NSDate date]];
NSArray *foo1 = [date componentsSeparatedByString:@" "];


NSRange amRange = [date rangeOfString:[formatter AMSymbol]];
NSRange pmRange = [date rangeOfString:[formatter PMSymbol]];
BOOL is24h = (amRange.location == NSNotFound && pmRange.location == NSNotFound);

NSArray *foo2 = [[foo1 objectAtIndex:0] componentsSeparatedByString:@":"];
int hour = [[foo2 objectAtIndex:0] intValue];
int minute = [[foo2 objectAtIndex:1] intValue];
int second = [[foo2 objectAtIndex:2] intValue];

BOOL isAM = NO;

if (is24h) {
    if (hour >= 12) {
        isAM = NO;
    } else {
        isAM = YES;
    }
} else {
    isAM = [[foo1 objectAtIndex:1] isEqualToString:@"AM"];
}
于 2014-09-16T09:21:41.750 回答
0

假设您需要为面向用户的字符串自定义日期格式,因为预设dateStyletimeStyle不会为您剪切,那么执行此操作的适当方法是使用setLocalizedDateFormatFromTemplate“j”或“jj”作为小时数,具体取决于是否你想要零填充(大概在使用该样式的区域中 - 到目前为止,它似乎总是忽略零填充,但我猜它是依赖于区域的)。

let dateFormatter = DateFormatter()
dateFormatter.setLocalizedDateFormatFromTemplate("jj:mm")

如果用户所在的地区默认使用 24 小时制和/或他们打开了 24 小时制(通过 iOS 设置中的开关),它将输出诸如“17:53”之类的字符串。否则它将输出像“5:53 PM”这样的字符串。

请注意,如果您要覆盖locale格式化程序,请务必在调用之前设置它setLocalizedDateFormatFromTemplate

模板方法将自动本地化您的字符串以使用适当的样式。

更多信息可以在“使用用户可见的日期和时间表示”下的文档中找到。

于 2020-12-03T23:02:58.027 回答