我有代码:
NSString *str = @"1981-04-01";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd"];
NSDate *back = [dateFormatter dateFromString:str];
NSLog("output: %@", back); //output (null)
当我尝试不同的日期时:
str = @“1982-04-01”; //也返回nil
str = @“1985-04-01”; //那看起来不错,输出:1985-03-31 20:00:00 +0000
看起来我的时区是GMT + 4。 在模拟器中测试:xcode 6.3,ios 8.3(iphone5s)
为什么NSDateFormatter有时返回nil?
我认为这与我的地区有关:爱沙尼亚。 有关OSX和iOS区域设置的图像。
http://darx.ignis.ee/osx_language_region.png http://darx.ignis.ee/ios_language_region.png
已解决:必须是夏令时开关问题。请阅读@Matthias Bauch的评论。
答案 0 :(得分:2)
我建议您将时区设置为GMT,如
dateFormatter.timeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
您视图中的完整代码。 。
NSString *str = @"1981-04-01";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.timeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
[dateFormatter setDateFormat:@"yyyy-MM-dd"];
NSDate *back = [dateFormatter dateFromString:str];
NSLog(@"output: %@", back);
您的输出
output: 1981-04-01 00:00:00 +0000