2015-09-04 114 views
4

在我的coredatabase中,我有一個帶有NSDate屬性的「新聞」實體。我的應用程序是全球。將NSDate轉換爲SWIFT中特定時區的字符串

新聞出版2015年9月4日22時15分54秒+0000法國小時(北京時間)

要保存日期,我把它轉換,在UTC格式。

let mydateFormatter = NSDateFormatter() 
mydateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss+00:00" 
mydateFormatter.timeZone = NSTimeZone(abbreviation: "UTC") 
var dateToSaved : NSDate! = mydateFormatter.dateFromString(date) 

的消息被記錄日期:2015年9月4日20點15分54秒+0000(UTC)

在應用之後,我需要轉換這個NSDate的保存在字符串:

let mydateFormatter = NSDateFormatter() 
mydateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss+00:00" 
var dateInString:String = mydateFormatter.stringFromDate(date) 

一切完美,如果我啓動應用程序在同一個時區,當我公佈的消息,即GMT + 2。

如果我更改設備的時區,例如UTC-4,然後將我的NSDate的字符串,日期是不一樣的。我得到了:2015-09-04 16:15:54 +0000

如何獲取與我的數據庫中的任何時區相同的UTC日期?

我對時區不太舒服,但我認爲我的問題來自NSDate中的「+0000」。在我所有的日子裏,總是有+0000,我認爲它應該是正確的時區。但我不知道該怎麼辦。

回答

10

的Xcode 8的測試版•斯威夫特3.0

你的ISO8601日期格式是不Z.基本HMS你需要使用 「XXXX」 爲 「+0000」。

「+0000」表示UTC時間。

let dateString = "2015-09-04 22:15:54 +0000" 

let dateFormatter = DateFormatter() 
dateFormatter.calendar = Calendar(calendarIdentifier: .ISO8601) 
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss xxxx" 
dateFormatter.locale = Locale(localeIdentifier: "en_US_POSIX") 
if let dateToBeSaved = dateFormatter.date(from: dateString) { 
    print(dateToBeSaved) // "2015-09-04 22:15:54 +0000" 
} 

如果你需要一些參考創建的日期格式,你可以使用這個:

enter image description here

+0

嗨.... @LeoDabus 我想字符串轉換爲日期。這裏是我的代碼: '讓A日期:字符串= 「2016年11月10日」 讓dateFormatter = DateFormatter() dateFormatter.calendar =日曆(標識符:.iso8601) dateFormatter.locale =語言環境(標識:「en_US_POSIX 「) dateFormatter.dateFormat =」dd MMMM,YYYY「 //dateFormatter.timeZone = TimeZone(identifier:」UTC「) let eventDate = dateFormatter.date(from:aDate) dateFormatter.dateFormat =」MMM dd,YYYY 「 aLblDate.text = dateFormatter.string(來自:EVENTDATE) 打印(」 日期:\(aLblDate.text)「)//它打印 」2015年12月28日「' – VRAwesome

+0

在評論我不能格式化代碼。對不起。如果有任何問題,請告訴我。 – VRAwesome

+0

你需要使用yyyy而不是YYYY –