如何将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)
据我所知是没有这样的事情UNIX时间之前1/1/1970 00:00 UTC。更多于Wikipedia。
这是否意味着我不应该使用UNIX的时间,如果我要去存储日期早于1970年(如生日)? –
当然有。从你自己的链接:'这也可以从时代向后延伸,使用负数;因此1957-10-04T00:00:00Z,在纪元前4 472天,由Unix时间编号-4 472×86 400 = -386 380 800代表。 – Jacob
@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
利用这一点,谢谢:) –