簡體   English   中英

使用時間戳和時區

[英]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進行選擇,則結果將不正確。

我建議以下三種解決方案之一:

  1. 將您服務器的時區切換為Asia / Jerusalem(確保重新啟動MySQL以應用更改)。
  2. 使用“ SET time_zone = timezone;”在每個腳本的開頭設置時區。
  3. 使用正確的時區創建一個TZ環境變量,以便MySQL在啟動時將該時區設置為默認時區(同樣,請確保重新啟動MySQL)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM