NSDateFormatter在12小时模式(NSDateFormatter in 12-hour

2019-07-29 23:13发布

我有下面的代码。

NSDateFormatter *df = ...;
[df setTimeZone:[NSTimeZone defaultTimeZone]];
[df setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSZZZ"];
NSDate * date = [df dateFromString:date_string]; //here is the problem

在24小时模式一切正常。 当12小时模式被设置在设备上,stringFromDate返回null。 DATE_STRING的格式是一样的所有的时间,日期格式了。 为什么会发生?

Answer 1:

尝试设置的语言环境是这样的:

NSLocale *twelveHourLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
df.locale = twelveHourLocale;

若要改为强制到24小时后,您可以使用:

NSLocale *twentyFour = [[NSLocale alloc] initWithLocaleIdentifier:@"en_GB"];


Answer 2:

在你的NSDateFormatter "yyyy-MM-dd'T'HH:mm:ss.SSSZZZ" HH代表24小时hh代表12小时



Answer 3:

12小时模式至24小时模式:

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"hh:mm a"];
NSDate *amPmDate = [formatter dateFromString:amPmHourString];
[formatter setDateFormat:@"HH:mm"];
NSString *24HourString = [formatter stringFromDate:amPmDate]];

对于24小时模式至12小时模式正好反其道而行之



Answer 4:

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
NSLocale *locale = [[[NSLocale alloc] 
                initWithLocaleIdentifier:@"en_US_POSIX"] autorelease];  
[dateFormat setLocale:locale];


文章来源: NSDateFormatter in 12-hour mode