Проблема с форматом часового пояса в iOS 10 с датами, созданными как timeIntervalSince1970
Прежде чем подать радар, я хотел бы проверить, не пропустил ли я что-то (и извлечь уроки из этого). Вот мой тестовый код с игровой площадки Swift 3 (код ведет себя так же в моем приложении). В настоящее время я работаю в часовом поясе "Европа / Лиссабон", который в феврале совпадает с GMT.
import UIKit
let date = Date(timeIntervalSince1970: 0)
var formatter = DateFormatter()
formatter.dateFormat = "HH:mm"
print(TimeZone.current.abbreviation()!) // GMT
formatter.timeZone = TimeZone.current
print(formatter.string(from: date)) // 01:00
formatter.timeZone = TimeZone(secondsFromGMT: TimeZone.current.secondsFromGMT())
print(formatter.string(from: date)) // 00:00
formatter.timeZone = TimeZone(identifier: "Europe/London")
print(formatter.string(from: date)) // 01:00
formatter.timeZone = TimeZone(identifier: "America/Los_Angeles")
print(formatter.string(from: date)) // 16:00
Каким-то образом отформатированное время отключено на один час, кроме случаев, когда я установил часовой пояс как
TimeZone(secondsFromGMT: TimeZone.current.secondsFromGMT())
Это ожидаемое поведение? Спасибо!
1 ответ
Решение
Результаты на самом деле верны, потому что в 1970 году часовой пояс "Европа / Лиссабон" был "UTC+1":
let tz = TimeZone(identifier: "Europe/Lisbon")!
print(tz.secondsFromGMT())
// Output: 0
print(tz.secondsFromGMT(for: Date(timeIntervalSince1970: 0)))
// Output: 3600
так что полночь "1 января 1970 г. по Гринвичу" была в час ночи в Лиссабоне.
Вы можете посмотреть часовые пояса и летнее время прошлых и будущих лет по адресу https://www.timeanddate.com/time/zone/portugal/lisbon.