2013-08-16 250 views

回答

15

你會過得更好設置時區的時間提前:

SET time_zone='UTC'; 
select FROM_UNIXTIME(1277942400); 

原因是涉及本地時區的轉換可能是有損的。有這樣的一個docs here例子(見下UNIX_TIMESTAMP()部分第四段開頭的「注:」)

+0

'SET time_zone ='+00:00''爲我工作。如果您想保留它,請參閱MārtiņšRadiņš答案。 – lepe

12

我的解決辦法是

SELECT CONVERT_TZ(FROM_UNIXTIME(1277942400), @@session.time_zone,'UTC') 

如果CONVERT_TZ返回null,確保MySQL的的時區表中填寫:

zypper install mysql-community-server-tools 
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql 
+0

我喜歡的解決方案 – Erbureth

+0

的無國籍真是一個偉大的解決方案:) –

+1

這是無狀態的,但沒有明確的日期,如conver_ttz不能知道源時間戳的時區偏移量。 –

1

我知道這已經回答了,但我仍願意貢獻:

如果您無法讓您的服務器產生UTC時區時間,功能如NOW()FROM_UNIXTIME()等,您必須設置time_zone像@Matt Johnson所說。

有一件事他沒有提及:SET time_zone = timezone;只設置當前連接的時區。 如果您希望這些函數默認以UTC格式返回/轉換您的日期,那麼您不必在每次要保存一些UTC日期時設置時區。

查看當前TIME_ZONE設置:SELECT @@global.time_zone, @@session.time_zone;

MySQL :: MySQL 5.5 Reference Manual :: 10.6 MySQL Server Time Zone Support