2016-07-15 58 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。