28

我有以下代码。

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

4 回答 4

55

在你的NSDateFormatter "yyyy-MM-dd'T'HH:mm:ss.SSSZZZ" HH看台上 24 小时和hh12 小时

于 2012-06-16T09:34:51.587 回答
37

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

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

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

NSLocale *twentyFour = [[NSLocale alloc] initWithLocaleIdentifier:@"en_GB"];
于 2012-06-16T09:35:48.150 回答
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 小时模式,只需执行相反的操作

于 2013-01-11T10:31:09.300 回答
4
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
NSLocale *locale = [[[NSLocale alloc] 
                initWithLocaleIdentifier:@"en_US_POSIX"] autorelease];  
[dateFormat setLocale:locale];
于 2015-10-29T14:47:44.830 回答