Преобразование меток времени Unix отличается в Mysql и Oracle

0

Преобразование метки времени в 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.

  • 0
    Где находится сервер Oracle? В стране с эффективным DST?
  • 0
    Похоже, что одна из ваших баз данных работает по британскому летнему времени (или какому-либо варианту перехода на летнее время, которое вы применяете в вашем регионе), а не по UTC.
Теги:

1 ответ

2

Отметка времени 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;
  • 0
    Почему не INTERVAL UnixTime SECOND ?
  • 0
    @SalmanA, это должен быть литерал, переменная невозможна. NUMTODSINTERVAL(UnixTime , 'second') также будет работать.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню