IOS преобразование UTC в местное время не точное - PullRequest
0 голосов
/ 13 сентября 2018

Я пытаюсь преобразовать UTC в местное время устройства в Swift 4. Я нашел много решений на stackoverflow для этого и реализовал их в своем коде.Мой код работает нормально, но он не возвращает правильный ответ.

Мой код:

func UTCToLocal() -> String {
    let a = "2:36:27 PM"
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "hh:mm:ss aa"
    dateFormatter.timeZone = TimeZone(abbreviation: "UTC")

    let dt = dateFormatter.date(from: a)
    dateFormatter.timeZone = TimeZone.current
    dateFormatter.defaultDate = Date()
    dateFormatter.dateFormat = "hh:mm:ss aa"

    return dateFormatter.string(from: dt!)
}

Согласно моему местному времени, Ливан, этот метод должен возвращать значение 5:3627:00Тем не менее, он возвращается 4:36:27 вечера.

Примечание: я проверил местное время моего устройства, и оно установлено правильно

1 Ответ

0 голосов
/ 13 сентября 2018

Это связано с переходом на летнее время в Ливане.Вы можете принять во внимание временной сдвиг, используя метод daylightSavingTimeOffset(for:) для своего часового пояса:

func UTCToLocal() -> String {
    let a = "2:36:27 PM"
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "hh:mm:ss aa"
    dateFormatter.timeZone = TimeZone(abbreviation: "UTC")
    let dt = dateFormatter.date(from: a)

    dateFormatter.timeZone = TimeZone.current
    let offset = dateFormatter.timeZone.daylightSavingTimeOffset(for: dt!)
    dateFormatter.defaultDate = Date()
    dateFormatter.dateFormat = "hh:mm:ss aa"
    return dateFormatter.string(from: dt! + offset)
}

UTCToLocal()

Обратите внимание, что dt - это 1 января 2000 года в 2:36PM ", поскольку вы не указали компоненты даты .day, .month и .year в a

...