2010-02-13 51 views
22

Điều này nghe có vẻ đơn giản nhưng tôi đã không thể tìm ra cách sử dụng câu lệnh SELECT đơn giản để trả về thời gian hiện tại bằng GMT.Truy vấn MySQL cho thời gian GMT hiện tại

Tôi đã cố gắng sử dụng CONVERT_TZ() để chuyển đổi NGAY() thành GMT dựa trên múi giờ của máy chủ và múi giờ GMT nhưng vì lý do nào đó nó trả về NULL khi tôi đặt trong múi giờ văn bản. Cách duy nhất tôi nhận được kết quả là để thực sự đặt trong các offsets đó là nhận được cách quá phức tạp cho những gì cần được một hoạt động thực sự đơn giản. Dưới đây là ý tôi là:

mysql> SELECT CONVERT_TZ(NOW(),@@global.system_time_zone,'GMT'); 
NULL 

mysql> SELECT CONVERT_TZ(NOW(),'PST','GMT'); 
NULL 

mysql> SELECT CONVERT_TZ(NOW(),'-08:00','+00:00'); 
2010-02-13 18:28:22 

Tất cả những gì tôi cần là một truy vấn đơn giản để trả về thời gian hiện tại bằng GMT. Cảm ơn trước sự giúp đỡ của bạn!

+1

Lưu ý: Sử dụng UTC thời gian nếu bạn cần một tham chiếu thời gian phổ quát. Đó là tài liệu tham khảo thực sự, chứ không phải GMT. Sau này thay đổi khi bật chế độ tiết kiệm ánh sáng ban ngày. –

+0

@culebron - Cảm ơn bạn đã đề xuất! Câu hỏi vẫn đứng vững.Làm thế nào sau đó tôi có thể sử dụng một tuyên bố chọn đơn giản để có được thời gian UTC hiện tại? –

Trả lời

31

này nên làm việc, nhưng với

SELECT CONVERT_TZ(NOW(),'PST','GMT'); 

tôi cũng có NULL như kết quả. hài hước đủ ví dụ trong docu mysql cũng trả về null

SELECT CONVERT_TZ('2004-01-01 12:00:00','GMT','MET'); 

http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_convert-tz vẻ như bạn tìm thấy một lỗi trong mysql . (Nhờ + Stephen Pritchard)

bạn có thể thử:

SET @[email protected]@TIME_ZONE; 
SET TIME_ZONE='+00:00'; 
SELECT NOW(); 
SET [email protected]_TIME_ZONE; 

ok không phải là chính xác những gì bạn muốn (4 truy vấn của nó, nhưng chỉ có một chọn :-)

hoặc bạn sử dụng tính theo giờ UTC (doesnt bị ảnh hưởng với thời gian tiết kiệm ánh sáng ban ngày)

SELECT UTC_TIMESTAMP(); 
+3

@Rufinus - Tốt, tôi không điên. Làm thế nào MySQL có thể có một lỗi trong một chức năng quan trọng như vậy? UTC_TIMESTAMP() chính xác là những gì tôi đang tìm kiếm. Cảm ơn! –

+0

Điều gì xảy ra nếu cơ sở dữ liệu lưu hồ sơ trong UTC và tìm kiếm chúng bằng múi giờ hiện tại? tại một múi giờ nói chung là gmt -1 và sau 6 tháng nó trở thành gmt +1 ?? – shzyincu

13

NO BUG trong CONVERT_TZ()

Để sử dụng CONVERT_TZ(), bạn cần phải cài đặt các bảng múi giờ nếu không MySql trả về NULL.

Từ CLI chạy sau như là người chủ

# mysql_tzinfo_to_sql/usr/share/zoneinfo | mysql -u mysql gốc

SEE http://dev.mysql.com/doc/refman/5.5/en/time-zone-support.html

Cảm ơn

http://www.ArcanaVision.com (SJP 2011-08-18)

+0

Điều này làm việc cho tôi hầu như mọi lúc, nhưng lần này 'convert_tz()' trả về NULL ngay cả sau khi cập nhật múi giờ. kỳ lạ! và tôi đã kiểm tra - các bảng timezone_xxx đã đầy. phiên bản máy chủ của tôi là 5.0.92, được biên dịch từ nguồn (như tôi luôn làm). Chưa bao giờ gặp vấn đề này trước đây ... – NickSoft

+3

Chỉ cần phát hiện ra rằng sau khi điền bảng múi giờ 'PST' vẫn không tồn tại. Tôi đọc trong wikipedia và Dường như PST không đủ rõ ràng để xác định múi giờ vì tiết kiệm ánh sáng ban ngày. Một số thành phố sử dụng DST thì không. Xem: http://en.wikipedia.org/wiki/Pacific_Time_Zone#Daylight_time. Tôi đã sử dụng Pacific/Los_Angeles thay vì PST (để sử dụng tài khoản DST). – NickSoft

+1

Tôi đã phải sử dụng 'US/Pacific' để nhận giá trị không NULL từ convert_tz() trên cơ sở dữ liệu 5.5.27 của tôi. Tôi tìm thấy chuỗi này bằng cách duyệt qua bảng mysql.time_zone_name. – randalv

0

Sau khi nhìn thấy tất cả các câu trả lời trên và nhìn thấy nó là không đáng tin cậy để chuyển đổi sang PST, Tôi vừa sử dụng điều này:

DATE_SUB (user_last_login, INTERVAL 7 hour)

+0

xin lỗi, không rõ ràng nó liên quan như thế nào với câu hỏi –

+0

Điều này không tính đến các quy tắc DST. – Zambonilli

0

này nên làm việc - Tôi nghĩ rằng bạn đang xác định múi giờ của bạn sai. Sử dụng Chicago làm ví dụ

SELECT CONVERT_TZ(NOW(), 'America/Chicago', 'GMT') 
+0

trả về null: ( – shzyincu

+1

Để sử dụng CONVERT_TZ(), bạn cần cài đặt các bảng múi giờ nếu không MySql trả về NULL! Chúng không được cài đặt sẵn trong mysql – konung

4

Cách chắc chắn để lấy UTC datetime hiện nay là:

SELECT CONVERT_TZ(NOW(), @@session.time_zone, '+0:00') 
-1

Không có lỗi trong chức năng CONVERT_TZ. Bạn nhận được NULL vì bạn sử dụng các tên múi giờ/từ viết tắt. Mysql không biết điều này 'GMT', 'PST', vv có nghĩa là trừ khi bạn cài đặt bảng mysql.time_zone_name. Tuy nhiên nếu bạn sử dụng số, nó sẽ luôn hoạt động.

mysql> SELECT CONVERT_TZ(NOW(), 'America/Chicago', 'GMT'); 

trả về NULL

mysql> SELECT CONVERT_TZ(NOW(),'-08:00','+00:00'); 

lợi nhuận 2016-06-24 17:58:33

0

Khi dấu thời gian máy chủ nguồn không rõ nhưng yêu cầu là cho một tz cụ thể thực hiện điều này:

select convert_tz(utc_timestamp(),'+05:00','+00:00') 

Điều này sử dụng CST làm ví dụ. utc_timestamp sẽ đảm bảo kết quả 'đến biển: 00' bất kể bạn truy vấn ở đâu. '+05: 00' là giá trị mong muốn của bạn. Điều này làm việc tuyệt vời khi nhấn nhiều máy chủ không xác định và nó đảm bảo với bạn rằng bạn trả về kết quả tất cả sẽ nằm trong một tập hợp kết quả tz chung.

0

Tôi đang tìm múi giờ của mình là GMT + 6 (Asia/Dhaka TimeZone)

Máy chủ MySQL ở Hoa Kỳ. Dưới đây làm việc cho tôi.

CHỌN CONVERT_TZ (UTC_TIMESTAMP(), '06: 00', '00: 00')

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