Преобразование меток времени Unix отличается в Mysql и Oracle - PullRequest
1 голос
/ 16 апреля 2019

Преобразование метки времени Unix, приводящее к различным результатам в mysql и oracle

select FROM_UNIXTIME(1387444958) from dual;

Вывод: 2013-12-19 10: 22: 38

select to_char(to_date('01/01/1970 00:00:00','DD/MM/YYYY HH24:MI:SS')+ (1387444958/86400),'YYYY-MM-DD HH24:MI:SS')from dual;

вывод: 2013-12-19 09: 22: 38

Может кто-нибудь помочь мне получить ту же метку времени от оракула, что и в MySql.

1 Ответ

2 голосов
/ 16 апреля 2019

Unix timestamp - это секунды от 1970-01-01 00:00:00 UTC, что на самом деле 1970-01-01 01:00:00 в вашем местном часовом поясе (или часовом поясе, где расположен ваш сервер MySQL). Похоже, FROM_UNIXTIME принимает это во внимание.

Для Oracle вы можете использовать эту функцию:

FUNCTION UnixTime2Timestamp(UnixTime IN NUMBER) RETURN TIMESTAMP IS
BEGIN
    RETURN (TIMESTAMP '1970-01-01 00:00:00 UTC' + UnixTime * INTERVAL '1' SECOND) AT LOCAL;
END UnixTime2Timestamp;

Полагаю, если вы хотите узнать время UTC в MySQL, вам нужно запустить

select 
   CONVERT_TZ(FROM_UNIXTIME(1387444958),'{your local timezone}','UTC') 
from dual;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...