2011-08-24 66 views

回答

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) 

現在你可以每天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

利用這一點,謝謝:) –

-3

據我所知沒有這樣的事情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)。我想這就是我的想法。 –

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

我發現了一個新的途徑:

轉換到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

相關問題