[NSDate date] 的时区是什么?

What is the timezone for [NSDate date]?

我对 [NSDate date] 中的时区如何工作有疑问。在我的应用程序中,我正在进行 PUT 网络服务调用,我必须在其中发送 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 date] 不是 return 当地时区的日期时间吗?

NSDate 表示时间连续体中的一个点,它与时区或区域设置无关。查看时区中的那个日期是那个时间的"view"(即"what do WE call that time in the temporal continuum?")。

如果您的目标是显示当前时区的时间,请查看 NSDateFormatter:https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSDateFormatter_Class/ - 您可以设置时区(如果需要,还可以设置语言环境)以在格式化程序中显示,它会告诉你那个日期在那个时区/语言环境中指的是什么。

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

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

Adjunct 的响应是正确的,但在您的情况下,两个响应是相等的,因为您正在比较两个相等的 "time values"。它独立于时区。