Как обеспечить сохранение даты в формате UTC?

У меня есть dateстолбец в моей СУБД Oracle 11g под названием changed_utc.

Как убедиться, что changedUtcполе из моей схемы Squeryl хранится в формате UTC, а не в локальном часовом поясе базы данных?

Как бы мне ни хотелось, я не могу изменить тип столбца на timestamp with timezone.

Мне очень нравится, что мои метки времени журнала в EST, поэтому я бы не хотел менять часовой пояс по умолчанию JVM на UTC.

1 ответ

  1. Если тип столбца не включает часовой пояс, то значение не будет сохранено в часовом поясе базы данных, оно будет сохранено без часового пояса. При обратном чтении, поскольку у него нет часового пояса, вероятно, он будет интерпретирован как находящийся в часовом поясе сервера, считывающего значение.

    Если вы хотите убедиться, что дата всегда преобразуется в UTC до ее записи и всегда интерпретируется как UTC при чтении, проще всего (предполагая, что вы используете Squeryl 0.9.6+) переопределить дату TEF (typed expression factory) в вашем классе, который расширяет PrimitiveTypeMode. См. пример здесь: http://squeryl.org/0.9.6.html