Как конвертировать время UNIX до 1970 года в формат даты в MySQL? - PullRequest
7 голосов
/ 24 августа 2011

У меня есть база данных, использующая время unix для ее дат (я использую mySQL). Я хочу получить даты в ежедневном формате даты. Это мой запрос:

SELECT FROM_UNIXTIME(time_created) FROM member

Это прекрасно работает с датами после 1970 г. (например, 1314162229), но не работает с датами до 1970 г. (например, -769338000). Здесь есть какая-нибудь работа?

Ответы [ 4 ]

9 голосов
/ 24 августа 2011

Возможный обходной путь - иметь постоянную подсказку, соответствующую секундам в определенном количестве лет (предпочтительно, кратном 4).Вы можете добавить эту константу, перевести время и затем вычесть количество выбранных лет.

Пример: выбрать 40 лет.

Определить постоянную:

MySQL [files]> select adddate(from_unixtime(0), interval 40 year);
+---------------------------------------------+
| adddate(from_unixtime(0), interval 40 year) |
+---------------------------------------------+
| 2010-01-01 01:00:00                         |
+---------------------------------------------+
1 row in set (0.09 sec)

MySQL [files]> select unix_timestamp(adddate(from_unixtime(0), interval 40 year));
+-------------------------------------------------------------+
| unix_timestamp(adddate(from_unixtime(0), interval 40 year)) |
+-------------------------------------------------------------+
|                                                  1262304000 |
+-------------------------------------------------------------+
1 row in set (0.09 sec)

СейчасВы можете использовать каждую временную метку Unix x между 1930 и 20xx и использовать ее.

select subdate(from_unixtime(x+1262304000), interval 40 year);

С вашим примером -769338000 вы получите

MySQL [files]> select subdate(from_unixtime(-769338000+1262304000), interval 40 year);
+-----------------------------------------------------------------+
| subdate(from_unixtime(-769338000+1262304000), interval 40 year) |
+-----------------------------------------------------------------+
| 1945-08-15 17:00:00                                             |
+-----------------------------------------------------------------+
1 row in set (0.09 sec)
6 голосов
/ 20 декабря 2015

Я нашел новый способ:

преобразование в дату MySQL:

SELECT DATE_ADD(FROM_UNIXTIME(0), interval YOURTIMESTAMPHERE second);

преобразование вашей эпохи в строку даты:

SELECT DATE_FORMAT(DATE_ADD(FROM_UNIXTIME(0), interval YOURTIMESTAMPHERE second), '%Y-%m-%d');

И обратно

SELECT TIMESTAMPDIFF(second,FROM_UNIXTIME(0),'1960-01-01 00:00:00' );

источник: http://www.epochconverter.com/programming/mysql-from-unixtime.php#negavtiveEpoch

0 голосов
/ 09 ноября 2013
SELECT DATE_ADD(CAST('1970-01-01 00:00:00' AS DATETIME), INTERVAL `time_created` SECOND) FROM `member`
0 голосов
/ 24 августа 2011

Насколько мне известно, - это нет такой вещи, как время UNIX до 01.01.1970 00:00 UTC. Больше на Википедии .

...