[英]working with timestamps and time zones
通過我的android智能手機應用程序(由我自己制作),我向丹佛的服務器發送了一個請求,以節省我的位置和時間。 它保存的TIMESTAMP
是丹佛的當前時間(與當地時間相差9小時)。 現在從最后一個請求開始16個小時后,我在php腳本中編寫了代碼
$query = "SELECT * FROM `tblLoc` WHERE datetime > (CURRENT_TIMESTAMP - 86400)";
好像我想帶我過去24小時。
這是一個錯誤!
$query = "SELECT * FROM `tblLoc` WHERE datetime > CURRENT_TIMESTAMP() - INTERVAL 24 HOUR";
在SQL 86400中!= 24小時!!!
您需要更改MySQL的時區而不是PHP 的時區 ,或者更改查詢以使PHP提供時間戳,如下所示:
$query = "SELECT * FROM tblLoc WHERE dateTime > (". time() ." - 86400)";
UTC_TIMESTAMP()
可能是一個不錯的方法,但是請確保您也基於相同的時間戳而不是基於CURRENT_TIMESTAMP()
進行插入/更新。
UTC時間戳基於格林尼治標准時間(格林威治標准時間),且位於格林尼治標准時間+0。 達拉斯參加GMT-6,亞洲/耶路撒冷參加GMT + 2。 因此,無論您當前的時區設置是什么, UTC_TIMESTAMP()
始終表示GMT時區中的當前時間。 CURRENT_TIMESTAMP()
表示當前時區中的當前時間。
但是,您的結果可能仍然不太正確。 他們可能暫時看起來正確,但可能要過幾個小時。 但是,如果您要基於CURRENT_TIMESTAMP
進行插入和更新,然后基於UTC_TIMESTAMP
進行選擇,則結果將不正確。
我建議以下三種解決方案之一:
TZ
環境變量,以便MySQL在啟動時將該時區設置為默認時區(同樣,請確保重新啟動MySQL)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.