如何将1970年之前的UNIX时间转换为MySQL中的日期格式?

时间:2011-08-24 05:58:11

标签: mysql unix-timestamp

我有一个数据库使用unix时间作为其日期(我正在使用mySQL)。我想以每日日期格式检索日期。这是我的问题:

SELECT FROM_UNIXTIME(time_created) FROM member

这适用于1970年以后的日期(例如,1314162229),但不适用于1970年之前的日期(例如,-769338000)。这附近有工作吗?

3 个答案:

答案 0 :(得分:9)

一种可能的解决方法是在一定年限内具有与秒数相对应的恒定方便(最好是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)

现在,您可以在1930年到20xx年间使用每个unix时间戳x并使用它。

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)

答案 1 :(得分:0)

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

答案 2 :(得分:-3)

据我所知, 没有UNIX时间在1/1/1970 00:00 UTC之前。更多信息Wikipedia