我有一个关于如何在[NSDate日期]的时区工作的问题。在我的应用程序中,我正在进行PUT web服务调用,其中我必须在UTC中发送日期,转换为毫秒。
-(NSNumber *) dateToMillis: (NSDate *) date
{
long long val = (long long)[date timeIntervalSince1970] *1000.0;
return @(val);
}
NSDate *date = [NSDate date];
NSLog(@"Date - %@", [self dateToMillis:date]);
NSTimeInterval timeZoneSeconds = [[NSTimeZone timeZoneWithName:@"CST"] secondsFromGMT];
NSDate *dateInUTC = [date dateByAddingTimeInterval:timeZoneSeconds];
NSLog(@"Date UTC - %@", [self dateToMillis:dateInUTC]);
我假设[NSDate date]将在本地时区(CST),并试图将其转换为UTC,但两个NSlogs打印完全相同的值。
[NSDate date]不返回本地时区的日期时间吗?
NSDate表示时间连续体中的一个点,它独立于时区或地区。查看时区中的日期是该时间的"视图"。"我们如何称呼时间连续体中的那个时间?")。
如果您的目标是显示当前时区的时间,请查看NSDateFormatter: https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSDateFormatter_Class/-您可以设置要在格式化程序中显示的时区(如果您愿意,还可以设置区域设置),它将显示该日期在该时区/区域设置中被称为什么。
NSDate
没有时区的概念。当您使用[NSDate date]
作为GMT从2001年1月1日开始的秒数时,就会创建它。为了在您自己的时区中创建或打印日期,您需要使用NSDateFormatter
方法为您的时区调整此日期。
这个答案很好地介绍了NSDate背后的概念。
什么辅助响应是正确的,但在您的情况下,这两个响应是相等的,因为您正在比较两个相等的"时间值"。