2013-08-16 27 views
18

Làm thế nào tôi có thể nhậnMysql FROM_UNIXTIME như UTC

FROM_UNIXTIME 

như UTC/GMT trong mysql? Ngày được trả về trong múi giờ của kết nối.

Tôi không muốn thay đổi múi giờ của kết nối.

Trả lời

15

Bạn sẽ khấm khá hơn thiết lập múi giờ trước thời hạn:

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

Lý do là chuyển đổi liên quan đến múi giờ địa phương có thể bị mất. Có một ví dụ về điều này trong các docs here (xem đoạn 4 dưới phần UNIX_TIMESTAMP() bắt đầu bằng "Lưu ý:")

+0

'SET time_zone = 'swimming: 00'' làm việc cho tôi. Xem Mārtiņš Radiņš trả lời nếu bạn muốn nó được bảo tồn. – lepe

12

giải pháp của tôi là

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

nếu CONVERT_TZ trả về null, đảm bảo bảng múi giờ của mysql được điền:

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

Tôi thích statelessness của giải pháp – Erbureth

+0

Thật là một giải pháp tuyệt vời :) –

+1

nó không quốc tịch, nhưng không thành công với ngày mơ hồ, như conver_ttz không thể biết chênh lệch múi giờ của dấu thời gian nguồn. –

1

Tôi biết điều này đã được trả lời nhưng tôi vẫn muốn đóng góp:

Nếu bạn wan't máy chủ của bạn để sản xuất thời gian múi giờ UTC với các chức năng như NOW()FROM_UNIXTIME() vv, bạn phải thiết lập các time_zone như @ Johnson Johnson nói.

Có một điều mà anh ấy không đề cập: SET time_zone = timezone; đặt múi giờ cho kết nối hiện tại. Sử dụng SET GLOBAL time_zone = '+00:00' nếu bạn muốn các hàm này trả lại/chuyển đổi ngày của bạn theo UTC theo mặc định, do đó bạn không phải đặt múi giờ mỗi lần bạn muốn lưu một số ngày dựa trên UTC.

Kiểm tra cài đặt TIME_ZONE hiện tại của bạn: SELECT @@global.time_zone, @@session.time_zone;

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

Các vấn đề liên quan