Конвертировать DateTime из одного часового пояса в другой часовой пояс - Swift - PullRequest
0 голосов
/ 09 ноября 2019

Мне нужно конвертировать один TimeZone в другой TimeZone для пользователя, и я использую приведенный ниже код:

 let myTime = "2019-11-02 02:00:00"
 let dateFormatter = DateFormatter()
 dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
 let date = dateFormatter.date(from: myTime)
 let source_timezone = NSTimeZone(abbreviation: TimeZone.current.abbreviation()!)
 let local_timezone = NSTimeZone.system
 let source_EDT_offset = source_timezone?.secondsFromGMT(for: date!)
 let destination_EDT_offset = local_timezone.secondsFromGMT(for: date!)
 let time_interval : TimeInterval = Double(destination_EDT_offset - source_EDT_offset!)
 let final_date = NSDate(timeInterval: time_interval, since: date!)
print(final_date)

Но получите меня crash nil здесь (source_EDT_offset).

1 Ответ

1 голос
/ 09 ноября 2019

Здесь приведена очищенная версия вашего кода с примером того, как его запускать. Обратите внимание, что я выбрал часовой пояс "from", который myTime имеет в этом примере

func changeToSystemTimeZone(_ date: Date, from: TimeZone, to: TimeZone = TimeZone.current) -> Date {
    let sourceOffset = from.secondsFromGMT(for: date)
    let destinationOffset = to.secondsFromGMT(for: date)
    let timeInterval = TimeInterval(destinationOffset - sourceOffset)
    return Date(timeInterval: timeInterval, since: date)
}

Пример, примечаниечто вам нужно установить локаль, соответствующую часовому поясу для введенной вами даты (myTime)

let myTime = "2019-11-02 02:00:00"
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"

if let date = dateFormatter.date(from: myTime), let timeZone = TimeZone(abbreviation: "UTC") {
    let offsetedDate = changeToSystemTimeZone(date, from: timeZone)
    print(date, Calendar.current.timeZone)
    print(offsetedDate, timeZone)
}

2019-11-02 01:00:00 +0000 Европа / Стокгольм (текущий)
2019-11-02 02:00:00 +0000 GMT (исправлено)

Обновление: добавлен параметр для часового пояса для преобразования в

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...