Преобразование метки времени в 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.
Отметка времени Unix - это секунды с 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;
INTERVAL UnixTime SECOND
?
NUMTODSINTERVAL(UnixTime , 'second')
также будет работать.