Swift NSCalendar.currentCalendar()。isDateInToday。()无法正常工作

时间:2017-01-26 17:58:05

标签: ios swift nsdate

因为这篇文章与将给定日期与“今天的日期”进行比较有关,请记住我在2017-01-26发布此帖子

基本上,我正在做以下事情:

  1. 从服务器获取ISO DATE
  2. 将所述日期转换为NSDate
  3. 使用NSCalendar.currentCalendar()。isDateInToday(myDate!)来实际检查该日期是否为今天。
  4. 然而,似乎我做错了什么,或者由于输出看起来不正常而丢失了一些东西。

    我从我的控制台复制了这个输出:

    String sent by the server --> 2017-1-27T0:00:00.000Z
    Conversion I make with a dateFormatter --> (2017-01-27 00:00:00 +0000)
    2017-01-27 00:00:00 +0000  is TODAY 
    

    上面的输出显然是错误的。因为那是明天,而不是今天。

    现在,在下面的输出中,服务器发送的日期实际上是今天但NSCalendar.currentCalendar()。isDateInToday(myDate!)另有说明

    String sent by the server --> 2017-1-26T0:00:00.000Z
    Conversion I make with a dateFormatter Optional(2017-01-26 00:00:00 +0000)
    2017-01-26 00:00:00 +0000 is NOT TODAY
    

    我的问题是,我可能做错了什么? 我已经仔细检查过我的计算机,模拟器和dateFormatter.locale是否已正确设置。

    我在字符串中尝试了类似“es_CL”的语言环境 还有

      dateFormatter.locale = NSLocale.currentLocale()
    

1 个答案:

答案 0 :(得分:3)

这可能与时区有关。您的服务器返回日期为UTC,即GMT-00:00

如果您在智利,您当地的时区为-3小时。因此,今天实际上从2017-01-26 03:00:00 +0000开始,到2017-01-27 03:00:00 +0000结束。

在这方面,您看到的结果是完全正确的。返回的白天时间不是您当地时区的“今天”。

要更改此行为,您可以将日历上的时区设置为UTC:

let calendar = NSCalendar.currentCalendar()
calendar.timeZone = TimeZone(secondsFromGMT: 0)