Установите пользовательский часовой пояс в DateFormatterTransform в ObjectMapper

Я относительно новичок в анализе строк времени ObjectMapper и столкнулся с огромной проблемой. У меня есть сервер, отправляющий мне строку времени в формате «гггг-ММ-дд'Т'ЧЧ: мм: сс.ССЗ», которую я должен проанализировать в своем объекте Date локально. Мой сервер отправляет мне дату в местном часовом поясе, то есть GMT+8, поэтому, скажем, я получаю от сервера «2018-08-23T15:02:44.000Z». Мне нужно сохранить это именно так, как оно есть в моем файле области. Я использую следующий код для преобразования:

let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSZ"
formatter.timeZone = TimeZone.current
recordDateTime <- (map["record_time"], DateFormatterTransform(dateFormatter: formatter))

Но проблема в том, что объект даты, сохраняемый в области, — 2018-08-23 23:02:44. Я считаю, что DateFormatterTransform принимает строки даты в зоне GMT ​​и, таким образом, преобразует их в мой локальный часовой пояс, то есть GMT+8. Могу ли я в любом случае установить часовой пояс для DateFormatterTransform вручную, чтобы я не получил сдвиг времени? Мы не можем изменить сервер в данный момент времени, так как база данных довольно большая и уже содержит все даты, хранящиеся в местном часовом поясе.

Пожалуйста, предложите, как решить эту проблему. Спасибо


person Sundus Alamovic    schedule 24.08.2018    source источник


Ответы (1)


Обнаружено, что это самое быстрое решение: написал собственный форматировщик даты, который будет вычитать смещение по Гринвичу в своем методе даты (из: строки). Это фрагмент кода:

class MyDateFormatter : DateFormatter {

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
}

override init() {
    super.init()
}

override func date(from string: String) -> Date? {
    return super.date(from:string)?.addingTimeInterval(-8*60*60)
}

}

person Sundus Alamovic    schedule 30.08.2018