NSDateFormatter dateFromString 1981-04-01

时间:2015-04-14 07:32:11

标签: ios objective-c nsdateformatter

我有代码:

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的评论。

  1. 添加dateFormatter.timeZone = [NSTimeZone timeZoneWithAbbreviation:@“GMT”];效果很好!

1 个答案:

答案 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