2016-07-15 91 views
0

所以我想比较从我的数据库(字符串,我转换为NSdates)与当前日期一堆日期。比较两个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") 
      } 

请注意,我只需要检查的日期本身,我不计较时间(小时,分钟)。

+0

不知道这是否重要,但我只是添加此信息:一般来说,我将我的设备的日期更改为第17次以进行测试。也许这会导致代码的一些问题? – SoundShock

+2

你在格林威治标准时间+2时区?然后'2016-07-16 22:00:00 + 0000'根据您所在的时区和指定日期的同一天为'2016-07-17 00:00:00 + 0200'。 –

+0

@MartinR我认为自夏天以后,我确实在GMT +02:00时间(比利时)。所以我的代码忽略小时和分钟无关紧要?因为22,而我的2+ GMT则改变了日期? 如何手动修复它?我从未在我的代码中添加22:00:00,它似乎发生在转换为dateFormatter.dateFormat =“yyyy-MM-dd” – SoundShock

回答

0

你需要决定你需要什么结果,然后编码。

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

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

但是,那些时间是格林尼治标准时间下午9:02和10:02 PM,并在格林尼治标准时间的同一天下降。

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