如何在ios中以24小时格式显示am / pm

时间:2012-10-13 08:10:57

标签: iphone ios

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

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

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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"];
}

答案 2 :(得分:0)

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

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

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

请注意,如果您要覆盖格式化程序上的locale,请确保在调用setLocalizedDateFormatFromTemplate之前先进行设置。

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

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