我有一個數據庫使用unix時間爲其日期(我使用mySQL)。我想以日日期格式檢索日期。這是我的查詢:如何將1970年之前的UNIX時間轉換爲MySQL中的日期格式?
SELECT FROM_UNIXTIME(time_created) FROM member
這在1970年以後正常工作的日期(例如,1314162229),但1970年的日期之前不工作(例如,-769338000)。這裏有什麼工作嗎?
我有一個數據庫使用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
利用這一點,謝謝:) –