[NSDate date]的时区是什么时候?

时间:2015-07-23 16:19:41

标签: ios objective-c datetime timezone nsdate

我对[NSDate date]中的时区如何工作有疑问。在我的应用程序中,我正在进行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,但两个NSlog都打印完全相同的值。

[NSDate日期]是否未在本地时区返回日期时间?

3 个答案:

答案 0 :(得分:4)

NSDate没有时区概念。从2001年1月1日起使用[NSDate date]作为GMT的秒数时创建它。为了在您自己的时区创建或打印日期,您需要使用NSDateFormatter方法来调整此日期为您的时区。

This answer很好地回顾了NSDate背后的概念。

答案 1 :(得分:3)

NSDate表示时间连续体中的一个点,它与时区或区域设置无关。在时区中查看该日期是一个"视图"当时(即"我们在时间连续统一体中称之为什么时间?")。

如果您的目标是在当前时区显示时间,请查看NSDateFormatter:https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSDateFormatter_Class/ - 您可以设置时区(以及区域设置,如果需要)以在格式化程序中显示,以及它将显示该日期在该时区/区域设置中所指的日期。

答案 2 :(得分:1)

什么辅助响应是正确的,但在你的情况下,两个响应是相等的,因为你正在比较两个相等的"时间值"。它独立于时区。