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

问题描述:

我有一个数据库使用unix时间为其日期(我使用mySQL)。我想以日日期格式检索日期。这是我的查询:如何将1970年之前的UNIX时间转换为MySQL中的日期格式?

SELECT FROM_UNIXTIME(time_created) FROM member 

这在1970年以后正常工作的日期(例如,1314162229),但1970年的日期之前不工作(例如,-769338000)。这里有什么工作吗?

一个可能的解决方法是在一定的年数(最好是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) 
+0

利用这一点,谢谢:) –

据我所知没有这样的事情UNIX时间之前1/1/1970 00:00 UTC。更多于Wikipedia

+0

这是否意味着我不应该使用UNIX的时间,如果我要去存储日期早于1970年(如生日)? –

+2

当然有。从你自己的链接:'这也可以从时代向后延伸,使用负数;因此1957-10-04T00:00:00Z,在纪元前4 472天,由Unix时间编号-4 472×86 400 = -386 380 800代表。 – Jacob

+0

@cularis:我错过了那部分,坦率地说,我从来没有见过这样用过。我个人只需要做一些历史性的事情就可以回到1200年代,所以UNIX时代从未出现过。我注意到,我链接到的一个兄弟文章说[“一些系统正确处理负时间值,而其他系统则不正确。”](http://en.wikipedia.org/wiki/Time_t)。我想这就是我的想法。 –

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

我发现了一个新的途径:

转换到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