Mysql

MYSQL 表示 ‘1970-1-1 0:0:0’ 的方法

  • August 29, 2017

出於興趣,除此之外還有其他表示時間戳的方法'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…

引用自:https://dba.stackexchange.com/questions/184544