Как преобразовать дату и время Oracle/Java в длинный тип

У меня есть временные метки из Oracle, хранящиеся в файле CSV с типом данных long. Эта временная метка генерируется с помощью функции Java getTime(), см. https://docs.oracle.com/javase/8/docs/api/java/sql/Timestamp.html

Временная метка выглядит, например, так: 1723207241234. В документации Oracle я нашел, что это миллисекунды с 1 января 1970 года, 00:00:00 по Гринвичу.

Итак, мне нужно проанализировать временную метку, созданную с помощью функции Java в Oracle (получить дату и время из временной метки), и сохранить эти значения в таблицах SAS. Есть ли способ сделать это?

Общий подход таков: Instant.ofEpochMilli(1723207241234L); Тогда это будет зависеть от того, что вы подразумеваете под «датой» и «временем» (например, дата и время, где и как вы хотите их использовать?) Локальными могут быть ZonedDateTime.ofInstant(Instant.ofEpochMilli(1723207241234L)‌​, ZoneId.systemDefault());

g00se 03.09.2024 16:42

Дата и время SAS указаны в секундах с 1 января 1960 года. Так что, возможно, что-то вроде want=have/1000+('01Jan1970:00:00:00'dt - '01Jan1960:00:00:00'dt );.

Quentin 03.09.2024 16:52

Я немного в замешательстве. Как этот вопрос связан с Java? А как САС? Что именно вам нужно?

user85421 03.09.2024 16:57

Вы указали значение. И указанное вами значение — это достаточно недавняя дата, а не та, к которой вам нужно было добавить десять лет...

g00se 03.09.2024 17:42

Что сказал @g00se. ZonedDateTime.ofInstant(Instant.ofEpochMilli(1723207241234L)‌​, ZoneId.systemDefault()) дает 2024-08-09T14:40:41.234+02:00[Europe/Copenhagen] в моем часовом поясе. Это звучит разумно?

Anonymous 03.09.2024 19:32

Что дал ваш поиск? Пожалуйста, всегда выполняйте поиск, прежде чем задавать вопрос здесь. В этом случае то, что вы найдете, уже должно привести вас далеко. Самой сложной задачей может стать отказ от старых веб-страниц, использующих Date, Calendar и/или — ой! -- SimpleDateFormat, так как эти занятия полны хлопот и давно устарели.

Anonymous 03.09.2024 19:35

Файлы CSV не имеют типов данных. Вы имеете в виду, что временная метка хранится в файлах CSV в виде потоков цифр, как в примерах, которые вы показали?

Tom 03.09.2024 20:29

Эта временная метка генерируется с помощью Java-функции getTime(). Ну, конечно, это не самая ранняя точка в цепочке событий, для вызова этого метода должен быть первый ResultSet. Так что, возможно, вам стоит вызвать вместо этого rs.getObject(columnIndex, java.time.Instant.class)

g00se 04.09.2024 15:03

Итак, мне нужно проанализировать временную метку, сгенерированную с помощью функции Java в Oracle (получить дату и время из временной метки). И, конечно же, Instant — это дата и время (в формате UTC).

g00se 04.09.2024 15:10
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
9
54
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

SAS хранит дату и время с секунд, начиная с 1 января 1960 года, 00:00:00 по Гринвичу. Чтобы преобразовать это значение в дату и время SAS, необходимо добавить 10 лет к значению даты и времени Unix в секундах. '01JAN1970:00:00'dt в SAS конвертируется в 10 лет в секундах.

data want;
    time = 1723207241234/1000 + '01JAN1970:00:00'dt;
    format time datetime20.;
run;
time
09AUG2024:12:40:41

Другие вопросы по теме