NSDateFormatter在12小时模式下

时间:2012-06-16 09:29:44

标签: objective-c ios datetime nsdate nsdateformatter

我有以下代码。

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的格式也始终相同,日期格式也一样。为什么会这样?

4 个答案:

答案 0 :(得分:51)

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

答案 1 :(得分:33)

尝试以这种方式设置语言环境:

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

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

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

答案 2 :(得分:6)

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小时模式,只需执行相反的操作

答案 3 :(得分:4)

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