我只有一些设备有问题NSDateFormatter从服务器返回null日期格式是“2013年11月10日13:05”。
NSDate *Now = [NSDate serverDate];
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"HH:mm, d MMM yyyy"];
NSDate *LastLogin = [dateFormat dateFromString:DateString];
在模拟器和少数设备上工作
LastLogin 2013-10-05 00:36:00 +0000 |现在2013-11-25 14:50:51 +0000
但在某些设备上
LastLogin(null)|现在2013-11-25 15:00:22 +0000
答案 0 :(得分:3)
问题似乎是语言环境,只需设置格式化程序的语言环境:
NSDate *Now = [NSDate serverDate];
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
dateFormat.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
[dateFormat setDateFormat:@"HH:mm, d MMM yyyy"];
NSDate *LastLogin = [dateFormat dateFromString:DateString];
答案 1 :(得分:3)
如果您没有设置特定区域设置,即使使用固定日期格式,数字和日期也可能会有不同的解析。
The docs有这个说法;
如果您使用的是固定格式的日期,则应首先将日期格式化程序的区域设置设置为适合您的固定格式的区域设置。在大多数情况下,最好的语言环境是en_US_POSIX,这是一个专门设计用于产生美国英语结果的语言环境,无论用户和系统偏好如何。
稍微扩展您的代码;
NSLocale *enUSPOSIXLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
NSDate *Now = [NSDate serverDate];
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setLocale:enUSPOSIXLocale];
[dateFormat setDateFormat:@"HH:mm, d MMM yyyy"];
NSDate *LastLogin = [dateFormat dateFromString:DateString];