Как конвертировать UNIX время до 1970 года в формат даты в MySQL?

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

SELECT FROM_UNIXTIME(time_created) FROM member

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

4 ответов


возможным обходным путем было бы иметь константу, соответствующую секундам за определенное количество лет (предпочтительно кратную 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 timestamp x между 1930 и 20xx и использовать его.

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

С вас пример -769338000, вы get

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)

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

преобразование в 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


SELECT DATE_ADD(CAST('1970-01-01 00:00:00' AS DATETIME), INTERVAL `time_created` SECOND) FROM `member`

насколько мне известно, там is нет такой вещи, как время UNIX до 1/1/1970 00: 00 UTC. Подробнее на Википедия.