所以我试图将数据库中的一堆日期(字符串,我将其转换为 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/