ios - 比较两个 NSDate 会返回误报

标签 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")
            }

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

最佳答案

您需要决定需要什么结果,然后为此编写代码。

NSDate 对象对地球上任何地方的时间时刻进行编码。在内部,他们使用 GMT 作为时间基准,但这是一个实现细节。

如果您想比较 2 个日期以查看它们是否在同一天,您需要指定用于比较的时区。如果我比较您所在时区(GMT+2)的下午 11:02 和下午 12:02,这两个日期属于不同的日子。

但是,这些时间是格林威治标准时间 (GMT) 晚上 9:02 和晚上 10:02,并且是格林威治标准时间 (GMT) 的同一天。

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

关于ios - 比较两个 NSDate 会返回误报,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38396433/

相关文章:

ios - 格式化日期时出错

ios - 在标签栏 Controller 之前添加 View Controller

iphone - 检查当前 viewController 类是否为 IOS 7 中的 Person ViewController 时出现问题

ios - 使用 ARSCNPlaneGeometry 获取 SCNPhysicsShape 会生成球体形状而不是平面

xcode - Swift 如何做 uiview 从左到右滑动的外观

ios - 如何将 24 小时制字符串时间转换为 12 小时制时间字符串格式

ios - 如何从 AWS S3 下载文件并在 iOS 中访问它

ios - 围绕固定点旋转 View - Objective-C

objective-c - 以编程方式检查是否安装了应用程序

ios - 考虑到时区,如何按日期属性获取记录?