ios - NSDateFormatter dateFromString 1981-04-01

标签 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 区域设置的图像。


(来源:ignis.ee)


(来源:ignis.ee)

已解决:一定是夏令时开关问题。请阅读@Matthias Bauch 后面的评论。

  • 添加 dateFormatter.timeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];效果很好!
  • 最佳答案

    我建议您将时区设置为 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
    

    关于ios - NSDateFormatter dateFromString 1981-04-01,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29621570/

    相关文章:

    objective-c - 哪个方法名称最符合 Objective-C/Cocoa 约定?

    objective-c - 单击按钮时更改 View ,但仅当文本字段 = 密码时

    iphone - EDT 到 GMT 转换

    objective-c - 解析 BST 时区

    ios - Xcode 7 不会从在 Xcode 6 中构建有效存档的同一项目构建有效存档

    ios - 如何在 SceneKit Editor 中使模型的枢轴点居中

    iphone - TableView问题...如何知道行号

    ios - 如何使 Long Look 通知中的组在底部只有圆角

    ios - NSDateFormatter 不适用于 PET 格式

    iphone - NSDateFormatter - 设置日期格式