Mysql
MYSQL 表示 ‘1970-1-1 0:0:0’ 的方法
出於興趣,除此之外還有其他表示時間戳的方法
'1970-1-1 0:0:0'
嗎from_unixtime(0)
?在 PostgreSQL 中有
'epoch'::timestamp
. 在 MySQL 中是否會有一個簡潔的等價物?
FROM_UNIXTIME(0)不是真的
'1970-01-01 00:00:00'
。它可能會因時區和夏令時而出現偏差。
例如,我住在紐約地區,格林威治標準時間為 -5。我的系統說明瞭如何以及為什麼:
mysql> SELECT UNIX_TIMESTAMP('1970-01-01 00:00:00'); +---------------------------------------+ | UNIX_TIMESTAMP('1970-01-01 00:00:00') | +---------------------------------------+ | 18000 | +---------------------------------------+ 1 row in set (0.00 sec) mysql> select FROM_UNIXTIME(0); +---------------------+ | FROM_UNIXTIME(0) | +---------------------+ | 1969-12-31 19:00:00 | +---------------------+ 1 row in set (0.00 sec) mysql>
它實際上關閉了 5 小時(18000 秒)
為了更正它,向前移動一天並向後移動
HOUR(FROM_UNIXTIME(0))
幾個小時mysql> SELECT FROM_UNIXTIME(0) + INTERVAL 1 DAY - INTERVAL HOUR(FROM_UNIXTIME(0)) HOUR DT; +---------------------+ | DT | +---------------------+ | 1970-01-01 00:00:00 | +---------------------+ 1 row in set (0.00 sec) mysql>
或者乾脆前進 5 小時
mysql> SELECT FROM_UNIXTIME(0) + INTERVAL (24 - HOUR(FROM_UNIXTIME(0))) HOUR DT; +---------------------+ | DT | +---------------------+ | 1970-01-01 00:00:00 | +---------------------+ 1 row in set (0.00 sec) mysql>
此公式應適用於任何時區
您在格林威治以東還是在其以西?那個日期,*在調整了時區後,*不能代表半個世界。
YEAR
跨度很大。
DATETIME
跨度很大。
TIMESTAMP
僅限於 ~1970… 至 ~2038…