2015-09-04 3 views
4

В моей базе данных coredatabase у меня есть объект новостей с атрибутом NSDate. Мое приложение доступно по всему миру.Преобразование NSDate в String с определенным часовым поясом в SWIFT

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)

Позже в приложение, мне нужно, чтобы преобразовать этот 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 в String, дата не совпадает. Я получил: 2015-09-04 16:15:54 +0000

Как получить ту же самую дату UTC, что и в моей базе данных по любому часовому поясу?

Мне не очень нравится часовой пояс, но я думаю, что моя проблема исходит от «+0000» в NSDate. Во все мои даты, всегда есть +0000, я думаю, это должен быть правильный часовой пояс. Но я не знаю, как это сделать.

ответ

10

Xcode 8 бета • Swift 3,0

Ваш ISO8601 формат даты основные 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" 
} 

Если вам нужна ссылка, чтобы создать свой формат даты вы можете использовать это:

enter image description here

+0

Привет .... @LeoDabus Я пытаюсь преобразовать строку в дату. А вот мой код: 'пусть aDate: String = "10 ноября 2016" пусть dateFormatter = DateFormatter() dateFormatter.calendar = Календарь (идентификатор: .iso8601) dateFormatter.locale = Locale (идентификатор:«en_US_POSIX ") dateFormatter.dateFormat = "дд MMMM, YYYY" //dateFormatter.timeZone = TimeZone (идентификатор: "UTC") пусть EVENTDATE = dateFormatter.date (от: aDate) dateFormatter.dateFormat =" МММ дд, YYYY " aLblDate.text = dateFormatter.string (from: eventDate!) print (" Date: \ (aLblDate.text) ") // он печатает« Dec 28, 2015 »' – VRAwesome

+0

В комментарии я не могу форматировать код. Простите за это. Пожалуйста, предложите мне, если что-то не так. – VRAwesome

+0

Вам нужно использовать yyyy вместо YYYY –

Смежные вопросы