Я столкнулся со следующим странным поведением, которое я просто не могу обернуть головой:
У меня есть unix -временная отметка в миллисекунды в левом столбце. Я хотел иметь столбец, содержащий то же значение, но в формате Oracle Timestamp для лучшей читаемости и утилит, которые приходят из этого формата. Поэтому я добавил столбец отметки времени, который вы видите справа
У меня есть программа Java, которая импортирует данные. Для новых данных я вставляю новый java.sql.Timestamp
(миллисекунды). Перед этим я выполнил следующий оператор SQL, чтобы обновить существующие столбцы в БД:
UPDATE custom c
SET c.EVENT_TIMESTAMP = (TO_TIMESTAMP('1970-01-01 00:00:00.000', 'YYYY-MM-DD hh24:mi:SS.FF')
+(NUMTODSINTERVAL(c.EVENT_TIME/1000,'SECOND')))
Проблема, с которой я столкнулся сейчас, заключается в следующем:
Метки времени, которые были обновлены с помощью * Оператор 1027 * имеет время, отображаемое в столбце отметки времени, которое соответствует ut c времени оставшегося столбца миллисекунд. Но метки времени, вставленные через новый java .sqlTimestamp (миллисекунды), имеют время, отображаемое в столбце меток времени, которое соответствует времени в миллисекундах в utc + 1.
время клиента моего клиента sql является ut c, поэтому отображаемые значения в столбце Timestamp также должны отображаться в ut c. Я попытался изменить часовой пояс клиента, чтобы посмотреть, будет ли он автоматически отображать мне время в этом часовом поясе, но отображаемое время осталось прежним. Поэтому я предполагаю, что это отображается в ut c в моем клиенте. Это означает, что оператор sql работал правильно. Таким образом, введенные значения через java неверны. Насколько я знаю, стандартный формат отметки времени oracle также не хранит информацию о часовом поясе, поэтому это тоже не объясняется.
Я вообще не понимаю, может быть, кто-то может помочь.
привет