Как конвертировать время между часовыми поясами с учетом перехода на летнее время? - PullRequest
0 голосов
/ 01 июня 2018

У меня есть следующая функция для преобразования времени:

static func convert(date: String) -> String {

        let formatter = DateFormatter()
        formatter.dateFormat = "h:m:s a"
        formatter.timeZone = TimeZone(identifier: "UTC")

        let convertedDate = formatter.date(from: date)
        formatter.timeZone = NSTimeZone.local

        return formatter.string(from: convertedDate!)
    }

Поскольку я устанавливаю новый часовой пояс на основе часового пояса устройства, я учил, что переход на летнее время будет учитываться.Но когда я передал 2:00:00 PM, он вернул 3: 0: 0 вечера вместо 4.

Я что-то упустил, есть ли автоматический способ правильно преобразовать время между часовыми поясами?

1 Ответ

0 голосов
/ 01 июня 2018

Работа с переходом на летнее время имеет смысл только тогда, когда дата известна.У тебя нет свидания, просто время.Таким образом, convertedDate будет 1 января 2001 года. Таким образом, независимо от того, какое правило перехода на летнее время используется для часового пояса пользователя, и языковой стандарт на эту дату будет использоваться при преобразовании времени.

Если вы хотите, чтобы время рассматривалось как«сегодня», тогда вы можете установить форматировщик даты defaultDate.

formatter.defaultDate = Date()

. Если вы хотите какую-то другую конкретную дату, создайте Date по мере необходимости и используйте ее для установки defaultDate. * 1010.*

...