NSDateFormatter忽略24小时时间格式

时间:2011-11-23 21:52:45

标签: iphone ios nsdate nsdateformatter

我已经和他坐在一起很长一段时间了。我能够弄明白,我做错了什么。

 NSString * dateString = @"2011-11-21 13:00";
 NSDateFormatter *serverDateFormatter = [[NSDateFormatter alloc] init];
 [serverDateFormatter setDateFormat:@"yyyy-MM-dd HH:mm"];
 NSDate *serverDate = [serverDateFormatter dateFromString:dateString];

 NSLog(@"%@", serverDate);

输出:

  

2011-11-21 12:00:00 +0000

为什么13:00会转换为12:00?我做错了什么?

3 个答案:

答案 0 :(得分:2)

您需要设置时区,例如

NSString * dateString = @"2011-11-21 23:20";
NSDateFormatter *serverDateFormatter = [[NSDateFormatter alloc] init];
[serverDateFormatter setDateFormat:@"yyyy-MM-dd HH:mm"];
[serverDateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
NSDate *serverDate = [serverDateFormatter dateFromString:dateString];
NSLog(@"%@", serverDate);

输出:

2011-11-23 14:22:10.924 xxx [23235:207] 2011-11-21 23:20:00 +0000

答案 1 :(得分:1)

我想你可能会在这次讨论中找到答案。显然,NSDateFormatter喜欢使用用户的设置,这可能不合适。

http://developer.apple.com/library/ios/#qa/qa1480/_index.html

虽然我认为这个答案是为了阻止24小时的行为,这就是你想强迫的。

我想说你想让setLocale部分正确。

ETA:以下是有关此内容的更多信息:

https://stackoverflow.com/q/7538489/290072

这将允许您的代码检测设备是否会尝试12小时或24小时。

答案 2 :(得分:0)

如果通过[server DateFormatter stringFromDate:serverDate]输出,该怎么办? ?