比较两个NSDate by .Day在swift中给出了错误的结果

时间:2016-03-24 16:11:44

标签: ios swift nsdate

我试图比较两个NSDate .Day这样做(两者都在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

有人能帮助我吗?

1 个答案:

答案 0 :(得分:7)

这两个记录日期正在以UTC时区记录。但如果您当前的时区位于其中,那么这两个日期将在2016年3月8日的时区中进行,并且您的时区将进行比较。或者,如果您居住在东部至少2.5小时,则两个日期都是2016年3月9日。

实施例。如果你住在美国东部(目前是格林尼治标准时间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

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