繁体   English   中英

如何从OSX中的本地日期获取/转换UTC日期?

[英]How to get/convert UTC date from local Date in OSX?

我需要通过指定的NSDate获取UTC日期。 问题是,如果日期在夏令时期间,utcDate不能正确计算。

这是我使用的代码:

NSDate *localDate = [updatesInfo objectForKey:@"date"];

NSTimeInterval timeZoneOffset = [[NSTimeZone defaultTimeZone] secondsFromGMT];
NSTimeInterval gmtTimeInterval = [localDate timeIntervalSinceReferenceDate] - timeZoneOffset;
NSDate *utcDate = [NSDate dateWithTimeIntervalSinceReferenceDate:gmtTimeInterval];

UPD:

我从/Library/Receipts/InstallHistory.plist中读取了localDate,这是一个OSX文件,其中包含所有应用程序的安装历史记录。 https://www.dropbox.com/s/3pc178avr4pj7uj/1.png?dl=0

NSDate的 UTC。 总是。

您发布的代码似乎表明您的“ updatesInfo”包含不正确的NSDate。 或者至少您认为它包含错误的日期。

创建日期时,您可能犯了一个错误。 作为部分解决方法,您可以尝试使用secondsFromGMTForDate:,它在大多数时间都是正确的,除了某些日期非常接近DST更改的点(因为您的日期不正确)。 您可以对此进行改进:

NSTimeInterval timeZoneOffset = [[NSTimeZone defaultTimeZone] secondsFromGMTForDate:localDate];
NSDate* betterDate = [localDate dateByAddingTimeInterval: -timeZoneOffset];
timeZoneOffset = [[NSTimeZone defaultTimeZone] secondsFromGMTForDate:betterDate];
NSDate* utcDate = [localDate dateByAddingTimeInterval: -timeZoneOffset];

属性列表文件将日期存储在UTC中。 如果您在纯文本编辑器中打开文件,将会看到类似

<key>date</key>
<date>2014-07-08T09:30:15Z</date>

这是“ 2014-07-08 09:30:15 UTC”。 因此

NSDate *date = [updatesInfo objectForKey:@"date"];

应该包含正确的日期,因此无需针对您当地的时区进行调整。

但是请注意,Xcode属性列表编辑器根据您的本地时区显示存储在属性列表文件中的日期。 而且,如果您在Xcode中编辑日期字段,它将被转换回UTC以存储在plist文件中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM