Вот уменьшенная версия моего класса форматирования:
class MyDateFormatters {
let timeFormatter : DateFormatter
init(timeZone:Int) {
self.timeFormatter = {
let tz = TimeZone(secondsFromGMT: timezone)
let df = DateFormatter()
df.timeZone = tz
df.setLocalizedDateFormatFromTemplate("hhmm")
return df
}()
}
}
В моем viewDidLoad
я извлекаю строку времени из необработанных данных. Но это странным образом получается неправильно: я вижу «PM», где я должен видеть «AM»!
Вот необработанные данные (поступающие через JSON):
let timeZone = -14400
let sunriseRaw = 1570620145
Теперь, если просто сделать простой форматировщик даты и распечатать sunriseRaw
, я получу вот что:
let sunrise = Date(timeIntervalSince1970: Double(sunriseRaw))
let df = DateFormatter()
df.dateFormat = "hh:mm a"
df.timeZone = TimeZone(secondsFromGMT: timeZone)
print(df.string(from: sunrise))
// 07:22 AM
И это правильно. Хорошо, теперь я сделаю с моим форматером даты:
let myf = MyDateFormatters(timeZone:timeZone).timeFormatter
let sunriseString = myf.string(from: sunrise)
print(sunriseString)
// 7:22 PM
Как это может быть? Мой класс делает то же самое, за исключением того, что он использует локализованный формат даты с шаблоном. Почему я вижу «PM» вместо «AM»