如何解析UTC纪元1352716800到NSDate?

时间:2012-09-04 10:07:56

标签: iphone ios nsdate nsdateformatter utc

我正在读取XML文件中的数据,该文件的UTC日期看起来像“2011-05-04T00:00:00”,UTC时代看起来像1352716800.

将UTC时期解析为NSDate可能比使用复杂的日期格式更加安全。我如何将UTC时代解析为NSDate?使用NSDateFormatter和“UTC Epoch”的特殊格式?

我认为它是[[NSDate alloc] initWithTimeIntervalSince1970:epoch]并且测试似乎有效。但我不确定这是不正确的,或者“UTC时代”是“自1970年以来”。 Apple Docs没有提及UTC Epoch。

3 个答案:

答案 0 :(得分:4)

是的,你说的是UTC Epoch。如果“纪元时间是UTC”结帐this

,请参考
NSString *epochTime = @"1352716800";

// (Step 1) Convert epoch time to SECONDS since 1970
NSTimeInterval seconds = [epochTime doubleValue];
NSLog (@"Epoch time %@ equates to %qi seconds since 1970", epochTime, (long long) seconds);

// (Step 2) Create NSDate object
NSDate *epochNSDate = [[NSDate alloc] initWithTimeIntervalSince1970:seconds];
NSLog (@"Epoch time %@ equates to UTC %@", epochTime, epochNSDate);

答案 1 :(得分:2)

您并不需要解析 UTC纪元日期。相反,您可以或多或少地直接从中创建NSDate实例:

long utcEpoch = 1352716800;
NSDate* date = [Date dateWithTimeIntervalSince1970: utcEpoch];

答案 2 :(得分:0)

如果从Firebase(kFirebaseServerValueTimestamp)检索时间戳,则纪元用毫秒表示:

  

Firebase服务器自动填充当前时间戳(自Unix纪元以来的时间,以毫秒为单位)的占位符值。

在这种情况下,如果您在iOS中使用initWithTimeIntervalSince1970,则需要除以1000。