Добрый день,
Я создаю службу веб-приложений, которая будет использоваться во всем мире.
Поэтому мне нужно хранить значения datetime в UTC и представлять их в часах на стене до конечного пользователя.
После прочтения переполнение стека, я понял, что я должен:
ZonedDateTime устойчивость к базе данных SQL
- использование временной метки в качестве типа столбца в БД (в настоящее время MariaDB 10.1.20)
- использования ZonedDateTime в Java (я использую java8)
Проблема возникла при преобразовании этих значений.
Как я использую JDBC, я должен сделать следующее преобразование:
java.sql.Timestamp <-> java.time.ZonedDateTime
Мой код:
// Get current zonedDateTime
ZonedDateTime zonedDateTime = ZonedDateTime.now(ZoneOffset.UTC);
// Convert zonedDateTime to java.sql.Timestamp before saving to DB
Timestamp = Timestamp.from(zonedDateTime.toInstant());
// Get zonedDateTime from resultSet
Timestamp timestamp = (Timestamp) resultSet.getObject("created");
ZonedDateTime zonedDateTime =
ZonedDateTime.ofInstant(ts.toInstant(), ZoneOffset.UTC))
Когда я использую:
zonedDateTimeBeforeSave.isEqual(zonedDateTimeAfterSave);
Это возвращает меня ложь (Мне нужно сравнить их в переопределенном равном методе моей модели домена)
Ниже печать из обоих:
zonedDateTimeBeforeSave: 2017-01-24T20: 18: 17.720Z
zonedDateTimeAfterSave: 2017-01-24T20: 18: 17Z
Вопросы:
- Я прямо в своем выборе. Возможно, я должен использовать другой столбец или тип java ...
- Я правильно занимаюсь преобразованиями. Может быть, есть еще один лучший способ
Спасибо вам
- Edit: После помощи Мэтта Джонсона я понял, что проблема заключается в том, что при сохранении DateTime к БД, это не спасает фракций, хотя и должно. Тип столбца FYI - это метка времени (6).
- Edit: Теперь я использую java.time.Instant вместо ZonedDateTime
Оставляя в стороне недостающую вторую проблему, почему вы не используете 'Instant' для хранения временных меток как UTC? –
Я только что сделал это рано утром, хотя был в сомнениях. Вы удалили их по вашему вопросу, спасибо. Я не хотел редактировать свой ответ, поскольку он не влияет на дробное поведение и все еще хотел увидеть другие предложения, касающиеся типа, например, как вы писали. – Sabine