Установить пользовательский часовой пояс в DateFormatterTransform в ObjectMapper - PullRequest
0 голосов
/ 24 августа 2018

Я относительно новичок в разборе строки времени ObjectMapper и столкнулся с огромной проблемой. У меня есть сервер, отправляющий мне временную строку в формате «гггг-ММ-дд'ТЧЧ: мм: сс.ССЗ», которую я должен анализировать в своем объекте Date локально. Мой сервер отправляет мне дату в местном часовом поясе, то есть по Гринвичу + 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 11:02:44 PM. Я полагаю, что DateFormatterTransform принимает строки даты в зоне GMT, и поэтому он конвертирует ее в мой местный часовой пояс, т.е. GMT + 8. В любом случае я могу установить часовой пояс для DateFormatterTransform вручную, чтобы я не получил сдвиг времени? Мы не можем изменить сервер в данный момент времени, так как база данных достаточно велика и уже хранит каждую дату в местном часовом поясе.

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

1 Ответ

0 голосов
/ 30 августа 2018

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

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)
}

}

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