【问题标题】:NSDateComponents from NSDate yielding unexpected resultsNSDate 中的 NSDateComponents 产生了意想不到的结果
【发布时间】:2013-03-16 18:41:59
【问题描述】:

我有一个存储的 NS 日期记录为

2013-03-15 00:00:01 +0000

我认为 +0000 是 UTC 时间。但是,当我尝试

NSCalendar* theCalendar = [NSCalendar currentCalendar];

unsigned theUnitFlags = NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;

NSDateComponents* compsForDate = [theCalendar components:theUnitFlags fromDate:compDate];

comps 记录为:

<NSDateComponents: 0xc0537b0>
    Calendar Year: 2013
    Month: 3
    Leap month: no
    Day: 14
    Hour: 20
    Minute: 0
    Second: 1
    Weekday: 5

我会假设这一天是 15 小时,小时是 0,因为我认为没有与该日期相关联的时区。谁能告诉我哪里出错了?

【问题讨论】:

    标签: ios date nsdate nscalendar nsdatecomponents


    【解决方案1】:

    有一个与该日期-UTC 相关的时区。还有一个与您的日历相关联的时区;可能是您的区域设置中的时区(无论如何这是默认设置)。日历为您提供了在其时区解释该日期所产生的日期组件。

    【讨论】:

    • 虽然这在一个层面上是有意义的,但它也令人困惑——这不应该以 UTC 格式给出日期组件吗?它如何知道日期是否存储在当前时区开始?有没有办法在 UTC 中获取 NSDateComponents?我故意将它们存储在 UTC 中,以便我可以获取正确的组件,然后将它们转换为所需的时区。
    • 谢谢,我不知道我在想什么
    【解决方案2】:

    时间字符串中的 +0000 表示 UTC(格林威治,英格兰)的小时偏移量。您在帖子中包含的结果时间组件是您的本地时区的时间。根据比较,您的本地时区与 UTC 相差 -4 小时。

    凯文。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-20
      • 2011-06-04
      相关资源
      最近更新 更多