比较两个NSDates会给出误报

时间:2016-07-15 12:42:57

标签: ios swift nsdate

所以我试图将我的数据库(字符串,我转换为NSdates)中的一组日期与当前日期进行比较。

当我运行示例日期的代码时:2016-07-17 12:28:51 +0000它会在前一天(昨天)给出误报。

控制台输出:

Optional(2016-07-15 22:00:00 +0000)
DAY IN THE PAST
Optional(2016-07-15 22:00:00 +0000)
DAY IN THE PAST
Optional(2016-07-16 22:00:00 +0000)
SAME DAY
Optional(2016-07-16 22:00:00 +0000)
SAME DAY
Optional(2016-07-16 22:00:00 +0000)
SAME DAY

我不知道我在这里做错了什么。代码:

let dateToday = NSDate() // example: 2016-07-17 12:28:51 +0000
 print(dateToday)
        let dateFormatter = NSDateFormatter()
        dateFormatter.dateFormat = "yyyy-MM-dd"
        let openDB = realm.objects(Article)
        for item in openDB {
            let getItem = item.toDate
            let date = dateFormatter.dateFromString(getItem!)

            let order = NSCalendar.currentCalendar().compareDate(dateToday, toDate: date!,
                toUnitGranularity: .Day)
            print(date) //example 2016-07-17 22:00:00 +0000
            switch order {
            case .OrderedDescending:
                print("DAY IN THE PAST")
            case .OrderedAscending:
                print("FUTURE DATE")
            case .OrderedSame:
                print("SAME DAY")
            }

请注意,我只需要查看日期本身,我不关心时间(小时,分钟)。

1 个答案:

答案 0 :(得分:0)

您需要确定所需的结果,然后为此进行编码。

SELECT student_id, name FROM course c, list l WHERE NOT EXISTS(SELECT NULL FROM course c, list l WHERE c.course_id=l.course_id) 个对象在地球上的任何时间编码。在内部,他们使用GMT作为他们的时间基础,但这是一个实现细节。

如果您想比较2个日期以查看它们是否属于同一天,则需要指定用于比较的时区。如果我比较您的时区晚上11:02 PM和12:02 GMT + 2,那么这2个日期会在不同的日期出现。

然而,这些时间是格林威治标准时间下午9:02和晚上10:02,并且在格林尼治标准时间的同一天下降。

如果您想知道日期是否与GMT中的日期相同,那么您需要创建一个格里历日历对象并将其时区设置为GMT。