【问题标题】:Compare two NSDate by .Day in swift is giving wrong results通过 .Day 快速比较两个 NSDate 给出了错误的结果
【发布时间】:2016-03-24 16:11:44
【问题描述】:

我试图在 .Day 之前比较两个 NSDate(都在 gmt 时区):

 var order = NSCalendar.currentCalendar().compareDate(event.startDate!, toDate: cell.date!,
                    toUnitGranularity: .Day)
                    if (order == .OrderedSame) {
                            print(String(event.startDate!) + " == " + String(cell.date!))
                        cell.events.append(event)
                        break
                    }

当使用 2016-03-08 21:43:53 +0000 和 2016-03-09 00:00:00 +0000 时,它说它们的顺序相同,但它们不是,日子不同。该函数输出:

 2016-03-08 21:43:53 +0000 == 2016-03-09 00:00:00 +0000

有人可以帮帮我吗?

【问题讨论】:

  • 相对于您日历的时区,结果可能是正确的。因此,打印出您日历的时区或分配一个日历并设置您希望结果“正确”的时区。
  • 你认为他们在不同的日子。但是 NSDate 打印 UTC,它们可能在 UTC 中的不同日期,但在您的时区,它们在同一日期。

标签: ios swift nsdate


【解决方案1】:

这两个记录的日期是以 UTC 时区记录的。但是,如果您当前的时区在该时区以西,那么这两个日期都是您所在时区的 2016 年 3 月 8 日,并且比较是在您的时区中完成的。或者,如果您居住在其以东至少 2.5 小时,那么这两个日期都是 2016 年 3 月 9 日。

示例。如果您住在美国东部(目前为 GMT-4,但 3 月 8 日为 GMT-5),那么这两个日期实际上是 2016-03-08 16:43:53 -05002016-03-08 19:00:00 -0500

示例。如果您居住在东欧或亚洲(例如 GMT+5),那么这两个日期将是 2016-03-09 02:43:53 +05002016-03-09 05:00:00 +0500

如您所见,这些是在同一天,所以比较是正确的。

【讨论】:

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