cmi*_*mii 4 timezone nsdate nsdateformatter ios swift
在我的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)
Run Code Online (Sandbox Code Playgroud)
新闻记录日期:2015-09-04 20:15:54 +0000(UTC)
稍后在应用程序中,我需要将此NSDate转换为保存在String中:
let mydateFormatter = NSDateFormatter()
mydateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss+00:00"
var dateInString:String = mydateFormatter.stringFromDate(date)
Run Code Online (Sandbox Code Playgroud)
如果我在发布新闻即GMT + 2时在同一时区启动应用程序,一切都会完美运行.
如果我更改设备的时区,例如UTC-4,然后在String中转换我的NSDate,则日期不一样.我得到了:2015-09-04 16:15:54 +0000
如何在任何时区获取与我的数据库相同的UTC日期?
我对时区不太满意,但我认为我的问题来自NSDate中的"+0000".在我的所有日期,总有+0000,我认为它应该是正确的时区.但我不知道该怎么做.
Leo*_*bus 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"
}
Run Code Online (Sandbox Code Playgroud)
如果您需要一些参考来创建日期格式,您可以使用: