在SWIFT中将NSDate转换为具有特定时区的string

在我的coredatabase中,我有一个具有NSDate属性的“新闻”实体。 我的应用程序是全球。

新闻发布2015-09-04 22:15:54 +0000法国时间(GMT +2)

为了保存date,我把它转换成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) 

新闻loggingdate: 2015-09-04 20:15:54 +0000 (UTC)

后来在应用程序中,我需要转换此string中保存的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,然后在string中转换我的NSDate,date是不一样的。 我得到了: 2015-09-04 16:15:54 +0000

如何获得与我的数据库中的任何时区相同的UTCdate?

我对时区不太舒服,但我认为我的问题来自NSDate中的“+0000”。 在我所有的日子里,总是有+0000,我想这应该是正确的时区。 但我不知道该怎么办

Xcode 8testing版•Swift 3.0

您的ISO8601date格式是基本的hms没有Z.您需要使用“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" } 

如果你需要一些参考来创build你的date格式,你可以使用这个:

在这里输入图像说明