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

时间:2015-09-04 21:00:05

标签: ios swift timezone nsdate nsdateformatter

在我的coredatabase中,我有一个带有NSDate属性的“news”实体。我的应用程序遍布全球。

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

要保存日期,我将其转换为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-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,则日期不一样。我得到了: 2015-09-04 16:15:54 +0000

如何在任何时区获取与我的数据库相同的UTC日期?

我对时区不太满意,但我认为我的问题来自NSDate中的“+0000”。在我的所有日​​期,总有+0000,我认为它应该是正确的时区。但我不知道该怎么做。

1 个答案:

答案 0 :(得分:10)

Xcode 8 beta•Swift 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