【问题标题】:What is the timezone for [NSDate date]?[NSDate 日期] 的时区是什么?
【发布时间】:2015-10-14 02:03:48
【问题描述】:

我有一个关于 [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 date] 不返回本地时区的日期时间吗?

【问题讨论】:

    标签: ios objective-c datetime timezone nsdate


    【解决方案1】:

    什么 Adjunct 响应是正确的,但在您的情况下,两个响应是相等的,因为您正在比较两个相等的“时间值”。它独立于时区。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        NSDate 表示时间连续体中的一个点,它与时区或地区无关。查看时区中的那个日期是那个时间的“视图”(即“我们在时间连续体中称那个时间是什么?”)。

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

        【讨论】:

        • 之前在网上回答这个问题的时候,我很生气,忘记了我的密码,所以我不得不作为客人来回答它:(
        猜你喜欢
        • 2016-06-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多