若無法修改 MySQL 伺服器時區設定,可在 SQL 查詢中以時差運算取得目標時區時間。本文說明使用 DATE_ADD、DATE_SUB 及 Unix 時間戳偏移的方法。
假設伺服器預設為 MST (UTC-7),目標時區對應差值:
-- 取得 EST 時間(比 MST 早 2 小時)
SELECT DATE_ADD(NOW(), INTERVAL 2 HOUR) AS est_time;
-- 取得 PST 時間(比 MST 晚 1 小時)
SELECT DATE_SUB(NOW(), INTERVAL 1 HOUR) AS pst_time;
-- 直接指定目標時區名稱(需載入時區表)
SELECT CONVERT_TZ(NOW(), 'MST', 'EST');
1 小時 = 3600 秒。以 EST (+2 hrs) 為例:
-- 取得 EST 的 Unix 時間戳
SELECT UNIX_TIMESTAMP() + (3600 * 2) AS est_timestamp;
-- 轉換為可讀日期時間
SELECT FROM_UNIXTIME(UNIX_TIMESTAMP() + (3600 * 2)) AS est_datetime;
透過 SQL 內建日期函數或 Unix 時間戳運算,可在不動伺服器設定下彈性取得各時區時間。生產環境建議統一儲存 UTC,應用層負責呈現轉換。