2015-09-04 115 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 –