我对[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日期]是否未在本地时区返回日期时间?
答案 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)
什么辅助响应是正确的,但在你的情况下,两个响应是相等的,因为你正在比较两个相等的"时间值"。它独立于时区。