不能在mysql中使用CONVERT_TZ函数将GMT时区转换为PDT


Not able to convert GMT timezone to PDT using CONVERT_TZ function in mysql

我不能在mysql中使用CONVERT_TZ函数将GMT时区转换为PDT,而我能够将GMT/UTC时区转换为MET/GMT时区。

MySQL Query :
SELECT CONVERT_TZ('2004-01-01 12:00:00','UTC','Asia/Jakarta') AS time;
+---------------------+
| time                |
+---------------------+
| 2004-01-01 19:00:00 |
+---------------------+
SELECT CONVERT_TZ('2015-10-21 12:50:00','GMT','PDT') AS time;
+------+
| time |
+------+
| NULL |
+------+

我刚刚注意到有一个PST8PDT时区名称,这是你正在寻找的吗?

SELECT CONVERT_TZ('2015-10-21 12:50:00','GMT','PST8PDT') AS time;

您不应该使用三个字母的时区缩写。虽然有一些是支持的,但总的来说有很多模棱两可的地方。例如,CST有五种不同的解释。您可以查看维基百科上的列表以获取更多冲突示例。

此外,时区缩写通常仅指时区的部分。例如,太平洋时间在冬季使用PST,在夏季使用PDT。时区数据库中的一些条目试图解释这一点(在指定PST时使用夏令时的PDT规则),但其他条目则严格固定偏移量,不会切换。分清孰对孰错是徒劳的。

您也不应该使用像PST8PDT这样的时区,因为这些主要是为了向后兼容旧的POSIX标准。这种类型的时区的问题是,它们不考虑任何历史变化。时区的规则会随着时间的推移而改变,比如美国在2007年改变了夏令时规则,或者俄罗斯在2014年改变了标准偏移量,等等。如果您使用POSIX格式,您的系统只能解释一组规则。

您应该只使用基于位置的IANA tz标识符的时区。太平洋时间是America/Los_Angeles。中央时间为America/Chicago。等。其他示例请参考维基百科上的列表。