2016-11-01 3 views
2

У меня есть следующие dateFormatter:дата Строка Дата возвращает неправильное время

var date = Date() 
var dateFormatter = DateFormatter() 
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss" 
let timeZone = NSTimeZone(name:"UTC+01:00") 
dateFormatter.timeZone = timeZone as TimeZone! 

let sweDate = dateFormatter.string(from: date) 

И когда я распечатать я получаю эти значения:

1: print(date) // 2016-11-01 10:16:19 +0000 
2: print("\(dateFormatter.string(from: date))") // 2016-11-01 11:16:35 
3: print(dateFormatter.date(from: sweDate)!) // 2016-11-01 10:16:41 +0000 

второе значение является правильным в string, но когда я конвертирую его в Date(), я получаю неправильное время, третий отпечаток. Почему это происходит и как его решить? Это шведский часовой пояс.

+0

Итак, он ничего не делает с' dateFormatter.date (from: sweDate)!) 'Then? Как получить второе значение в 'Date'? –

+0

'Date' не сохраняет часовой пояс, поэтому он всегда печатает время UTC независимо от того, какой часовой пояс вы использовали при форматировании. – ozgur

+0

@ozgur, да, я получил его, но как получить второе значение 'Date' вместо' String'? –

ответ

1

Потому что String 'sweDate' не включает информацию о часовом поясе, поэтому вы получаете время для нулевой зоны.

-1

Это действительно правильное время, но, как вы сказали, это другой часовой пояс, и это просто, как он сохраняется в фоновом режиме. Пока вы всегда используете DateFormatter для возврата из Date to String, пользователь никогда не узнает.

Вы всегда можете использовать различные DateFormatters для отображения именно то, что вам нужно: http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_Patterns

Ex: "YYYY-MM-dd'T'HH: мм: сс ZZZZZ" даст «2016-11-01T11: 16:35 +01: 00 "

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