Получение даты из DatePicker в разных часовых поясах - PullRequest
0 голосов
/ 26 апреля 2018

Я использую стандартный DatePicker и печатаю дату поверх него. По какой-то причине мой сборщик дат имеет часовой пояс, установленный на IST, что может быть из-за локали.

Давайте рассмотрим пример:

DatePicker -> 12:00 PM Дата считывается -> 06:30:00 + 0000

Что правильно, так как дата будет печатать UTC время и IST равно UTC + 5: 30

Теперь, когда я изменил часовой пояс DatePicker, скажем, Лондон, который является GMT + 1 ,

DatePicker -> 12:00 PM Дата считывается -> 06:30:00 + 0000

Где в дате следует читать 11: 00: 00

Как я меняю часовой пояс DatePicker:

if let tmz = selectTimeZone {

    datePicker.timeZone = tmz
}

1 Ответ

0 голосов
/ 26 апреля 2018

У меня раньше была такая же проблема, но по другой причине. Попробуйте, надеюсь, это поможет.

Первый -

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss" 
var startDate = dateFormatter.string(from: yourdatepicker.date)
startDate = localToUTC(date: startDate)

Во-вторых, мы конвертируем это в локальное время в UTC, здесь мы упоминаем TimeZone в системное время

func localToUTC(date:String) -> String {

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
dateFormatter.timeZone = NSTimeZone.system
dateFormatter.timeZone = TimeZone(abbreviation: "UTC")
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
let dt = dateFormatter.date(from: date)
return dateFormatter.string(from: dt!)
}

В-третьих, если вы хотите конвертировать UTC в местное время

func UTCToLocal(date:String) -> String {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
dateFormatter.timeZone = TimeZone(abbreviation: "UTC")
let dt = dateFormatter.date(from: date)
dateFormatter.timeZone = NSTimeZone.system
dateFormatter.dateFormat = "hh:mm a"
return dateFormatter.string(from: dt!)
 }
...