iphone - 尝试从祖鲁时间的 UTC 字符串获取日期时为 Nil NSDate

标签 iphone objective-c nsdate utc nsdateformatter

在 Objective-C 中编写一个 iPhone 应用程序,我有一个字符串形式的日期(UTC 格式,末尾有一个 Z 表示零 UTC 偏移量或祖鲁时间),我需要将其解析为 NSDate 对象。

一些代码:

NSDateFormatter* df = [[NSDateFormatter alloc]init];
[df setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSZ"];
NSString* str = @"2009-08-11T06:00:00.000Z";
NSDate* date = [df dateFromString:str];
通过调试器运行它,date 最终为 nil!我假设它与我的日期格式字符串有关。

如何修复它以正确解析日期字符串?

一个想法是使日期格式文字中的 Z ,将日期格式设置为 yyyy-MM-dd'T'HH:mm:ss.SSS'Z'.

这会起作用,除非当 Z 被解析为文字时,日期会丢失偏移量信息,因此不明确,因此被解释为本地时间。

例如,如果要解析的字符串是 2009-08-11T06:00:00.000Z(祖鲁时间 6:00),它将被解释为本地时间 6:00,然后将应用不正确的偏移量。然后它将被解析为 2009-08-11T06:00:00.000-600(祖鲁时间 12:00),偏移量取决于用户的偏移量。

谢谢!

最佳答案

我也遇到过这个问题,我不确定这是 Apple 代码中的 API 错误,还是我缺乏理解,但我已经通过在我的日期字符串中使用小时偏移来解决这个问题。

如果您将示例中的代码更改为:

NSDateFormatter* df = [[NSDateFormatter alloc]init];
[df setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSZ"];
NSString* str = @"2009-08-11T06:00:00.000-0700";   // NOTE -0700 is the only change
NSDate* date = [df dateFromString:str];

它现在将解析日期字符串。当然 -0700 小时是我的偏移量,您必须将其更改为您的。希望这会有所帮助。

关于iphone - 尝试从祖鲁时间的 UTC 字符串获取日期时为 Nil NSDate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1263455/

相关文章:

iphone - 在 iPhone 中使用 OpenCV 从图像创建视频

iphone - 完全困惑在哪里更改 openCV 中的代码

objective-c - 从父类(super class)调用方法

objective-c - 在 iOS 7 中检测后台应用刷新的用户设置

objective-c - 两个NSDate之间的日期比较

ios - 将 UTC 日期格式转换为本地 nsdate

iPhone(iOS 5)从横向强制纵向并返回

iphone - 将Adobe PDF日期字符串转换为NSDate

iphone - 按下主页按钮时如何显示红色状态栏?

objective-c - NSDate 转 GMTDate 转 JSON 格式