【问题标题】:Confusion with NSDate与 NSDate 混淆
【发布时间】:2014-07-07 10:55:35
【问题描述】:

我正在尝试以这种方式创建 NSDate 对象

NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
   // [gregorian setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];
    NSDateComponents *weekdayComponents = [gregorian components:(NSDayCalendarUnit | NSYearCalendarUnit | NSMonthCalendarUnit  | NSMinuteCalendarUnit)fromDate:[NSDate date]];
    NSInteger day    = [weekdayComponents day];
    NSInteger month  = [weekdayComponents month];
    NSInteger year   = [weekdayComponents year];


    NSDateComponents *timeZoneComps=[[NSDateComponents alloc] init];
    [timeZoneComps setDay:day];
    [timeZoneComps setMonth:month];
    [timeZoneComps setYear:year];
    [timeZoneComps setHour:00];
    [timeZoneComps setMinute:00];
    [timeZoneComps setSecond:01];

    m_currentDate         = [gregorian dateFromComponents:timeZoneComps];

当我记录 currentDate 时,我得到了这个

"2014-07-07 06:00:01 +0000"

如果我把这个保存到 plist 我得到这个

07-Jul-2014 11:30:01 am

如果我使用“UTC”作为时区

我明白了

"2014-07-07 00:00:01 +0000"

在 plist 中显示为

07-Jul-2014 5:30:01 am

我不明白发生了什么,有人可以帮我解决这个问题

我想知道,如果我不设置任何 timeZone 将使用什么 timeZone?

我们是否需要明确地将 UTC 设置为 timeZone 或者我们需要使用 systemTimeZone。

【问题讨论】:

  • 你想要的时区取决于你想要的时区。日期/时间代表什么?
  • 对不起,我没有问你问题,你需要什么信息?
  • “保存到 plist”是什么意思?你是怎么保存的?
  • 我将 NSdates 存储在一个数组中,并将该数组存储在一个 plist 中
  • 我的意思是要使用的时区取决于您希望日期/时间表示的内容。如果您想要一个可以在全球范围内使用的日期/时间,而不管用户自己的时区如何,那么您需要 UTC。如果您只关心本地时区,请使用它。

标签: ios nsdate nstimezone


【解决方案1】:

关于NSDate,您需要了解的是,没有日、周、月、年、时区等...

NSDate 纯粹是一个时间点。它没有关于它是什么时区等的信息......

实际上它只是一个数字。如果有帮助,您可以将其视为使用 UTC。

为您提供时区等信息的类是NSCalendarNSDateFormatter 等...

我猜你是在 UTC+6 的时区?这就是为什么当您使用 00:00:01 创建日期并将其注销时,它会显示为 06:00:01。

这与NSDate 无关。您在控制台中看到的是一个字符串。它是使用默认时区(您自己的)的日期对象的表示。

我必须查看保存到 plist 的代码,但我怀疑这是同一个问题。您正在保存某些内容并假设它使用的是特定时区,而实际上并非如此。

【讨论】:

  • 您还需要提及使用[NSDate description] 而不是NSDateFormatter 记录NSDate 对象之间的经典区别。
  • 在这里我创建了时间为 00:00:01 的日期,它显示为 6:00:01,但如果我创建的日期为 UTC 时区,那么为什么它显示 00:00: 01,因为 UTC 时间将比我的时区晚 5:30 小时
  • 你好,当我们从字符串中获取日期时,无论它们是否与它相关联
猜你喜欢
  • 1970-01-01
  • 2014-07-09
  • 1970-01-01
  • 2016-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多