【问题标题】:Getting date from [NSDate date] off by a few hours将 [NSDate date] 的日期缩短几个小时
【发布时间】:2012-01-18 00:00:02
【问题描述】:

我正在使用

NSDate *date = [NSDate date];

获取日期,但我得到的日期差了 2 小时。

【问题讨论】:

  • 您在 GMT+2 时区吗?
  • 是的,为什么会有这个问题?
  • 我猜它告诉你的是 UTC 时区的日期,而不是你的。

标签: objective-c cocoa formatting timezone nsdate


【解决方案1】:

NSDate 对象没有时区。它们代表了一个绝对的时刻。但是,当您向一个人询问其description(例如,通过使用NSLog() 打印它)时,它必须选择一个时区。最合理的“默认”选择是 GMT。如果您自己不在格林威治标准时间,则日期似乎不正确,按您自己的偏移量计算。

您应该始终使用NSDateFormatter 来创建显示字符串。格式化程序的时区应该设置为您的,这是默认设置。

【讨论】:

    【解决方案2】:

    您可以像这样更正您的日期:

    NSDate * dateGMT = [NSDate date];
    NSTimeInterval secondsFromGMT = [[NSTimeZone localTimeZone] secondsFromGMT];
    NSDate * correctDate = [dateGMT dateByAddingTimeInterval:secondsFromGMT];
    

    【讨论】:

      【解决方案3】:
      -(NSDate *)getDateInCurrentSystemTimeZone
      {
          NSDate* sourceDate = [NSDate date];
          NSTimeZone* sourceTimeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
          NSTimeZone* destinationTimeZone = [NSTimeZone systemTimeZone];
      
          NSInteger sourceGMTOffset = [sourceTimeZone secondsFromGMTForDate:sourceDate];
          NSInteger destinationGMTOffset = [destinationTimeZone secondsFromGMTForDate:sourceDate];
          NSTimeInterval interval = destinationGMTOffset - sourceGMTOffset;
      
          NSDate* destinationDate = [[NSDate alloc] initWithTimeInterval:interval sinceDate:sourceDate];
          return destinationDate;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-10
        • 1970-01-01
        相关资源
        最近更新 更多