【问题标题】:Swift NSCalendar.currentCalendar().isDateInToday.() not working properlySwift NSCalendar.currentCalendar().isDateInToday.() 无法正常工作
【发布时间】:2017-01-26 17:58:04
【问题描述】:

因为这篇文章与比较给定日期和“今天的日期”有关,请记住我在 2017 年 1 月 26 日发布这篇文章

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

  1. 从服务器获取 ISO DATE
  2. 将所述日期转换为 NSDate
  3. 使用 NSCalendar.currentCalendar().isDateInToday(myDate!) 实际检查该日期是否为今天。

但是,由于输出似乎异常,我似乎做错了什么,或者遗漏了一些东西。

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

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()

【问题讨论】:

  • 您忽略了将相关代码放入您的问题中。请更新。

标签: ios swift nsdate


【解决方案1】:

这可能与时区有关。您的服务器返回日期是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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-11
    • 1970-01-01
    相关资源
    最近更新 更多