MySQL 拒绝 return 24 小时制 - 所有时间都在修改后的 12 小时制
MySQL refuses to return 24hr time - all times in modified 12hr
我们的生产 MySQL 服务器拒绝以 24 小时格式 return 次,而是选择 12 小时格式。我搜索了 SO 和 Google,但所有问题都与格式相关,我的格式没有问题。
一个基本的例子;
mysql> SELECT FROM_UNIXTIME(1442987399);
+---------------------------+
| FROM_UNIXTIME(1442987399) |
+---------------------------+
| 2015-09-23 05:49:59 |
+---------------------------+
1 row in set (0.00 sec)
正在检查 http://www.epochconverter.com/
Your time zone: 9/23/2015, 3:49:59 PM GMT+10:00
这不是时间问题,实际上是 15:49 下午。
问题是,即使我尝试强制使用 24 小时格式,它仍然不会这样做......
mysql> SELECT HOUR(DATE_FORMAT(FROM_UNIXTIME(1442987399), "%T"));
+----------------------------------------------------+
| HOUR(DATE_FORMAT(FROM_UNIXTIME(1442987399), "%T")) |
+----------------------------------------------------+
| 5 |
+----------------------------------------------------+
1 row in set (0.00 sec)
有趣的是,在 12 小时内它是 3,而不是 5。在 24 小时内它是 15。所以,这两种格式都不正确。
奇怪的是,我们在 +10 时区,会不会因为某种原因减去 10 小时?
时间戳是什么时间并不重要...我已经在数据库中的许多时间戳和行中测试了这一点。
所有这些查询在我的本地和开发服务器上都按预期工作。我对 MySQL 日期函数并不陌生。不过我是这个问题的新手。
在我的本地;
mysql> SELECT HOUR(DATE_FORMAT(FROM_UNIXTIME(1442987399), "%T"));
+----------------------------------------------------+
| HOUR(DATE_FORMAT(FROM_UNIXTIME(1442987399), "%T")) |
+----------------------------------------------------+
| 15 |
+----------------------------------------------------+
1 row in set (0.00 sec)
很清楚,我也可以删除 DATE_FORMAT,它只是为了公平比较。
mysql> SELECT HOUR(FROM_UNIXTIME(1442987399));
+---------------------------------+
| HOUR(FROM_UNIXTIME(1442987399)) |
+---------------------------------+
| 15 |
+---------------------------------+
1 row in set (0.00 sec)
编辑
感谢@irina-avram,这是一个 time_zone 问题。
mysql> SHOW VARIABLES LIKE '%time_zone%';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| system_time_zone | UTC |
| time_zone | UTC |
+------------------+-------+
2 rows in set (0.00 sec)
据此,该值在当前时区中给出,您的提供者之一:
FROM_UNIXTIME(unix_timestamp), FROM_UNIXTIME(unix_timestamp,format):
Returns a representation of the unix_timestamp argument as a value in
'YYYY-MM-DD HH:MM:SS' or YYYYMMDDHHMMSS.uuuuuu format, depending on
whether the function is used in a string or numeric context. The value
is expressed in the current time zone. unix_timestamp is an internal
timestamp value such as is produced by the UNIX_TIMESTAMP() function.
( https://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html#function_from-unixtime )
但你可以试试这个:
SET time_zone='+10:00';
SELECT FROM_UNIXTIME(1442987399);
我们的生产 MySQL 服务器拒绝以 24 小时格式 return 次,而是选择 12 小时格式。我搜索了 SO 和 Google,但所有问题都与格式相关,我的格式没有问题。
一个基本的例子;
mysql> SELECT FROM_UNIXTIME(1442987399);
+---------------------------+
| FROM_UNIXTIME(1442987399) |
+---------------------------+
| 2015-09-23 05:49:59 |
+---------------------------+
1 row in set (0.00 sec)
正在检查 http://www.epochconverter.com/
Your time zone: 9/23/2015, 3:49:59 PM GMT+10:00
这不是时间问题,实际上是 15:49 下午。
问题是,即使我尝试强制使用 24 小时格式,它仍然不会这样做......
mysql> SELECT HOUR(DATE_FORMAT(FROM_UNIXTIME(1442987399), "%T"));
+----------------------------------------------------+
| HOUR(DATE_FORMAT(FROM_UNIXTIME(1442987399), "%T")) |
+----------------------------------------------------+
| 5 |
+----------------------------------------------------+
1 row in set (0.00 sec)
有趣的是,在 12 小时内它是 3,而不是 5。在 24 小时内它是 15。所以,这两种格式都不正确。
奇怪的是,我们在 +10 时区,会不会因为某种原因减去 10 小时?
时间戳是什么时间并不重要...我已经在数据库中的许多时间戳和行中测试了这一点。
所有这些查询在我的本地和开发服务器上都按预期工作。我对 MySQL 日期函数并不陌生。不过我是这个问题的新手。
在我的本地;
mysql> SELECT HOUR(DATE_FORMAT(FROM_UNIXTIME(1442987399), "%T"));
+----------------------------------------------------+
| HOUR(DATE_FORMAT(FROM_UNIXTIME(1442987399), "%T")) |
+----------------------------------------------------+
| 15 |
+----------------------------------------------------+
1 row in set (0.00 sec)
很清楚,我也可以删除 DATE_FORMAT,它只是为了公平比较。
mysql> SELECT HOUR(FROM_UNIXTIME(1442987399));
+---------------------------------+
| HOUR(FROM_UNIXTIME(1442987399)) |
+---------------------------------+
| 15 |
+---------------------------------+
1 row in set (0.00 sec)
编辑
感谢@irina-avram,这是一个 time_zone 问题。
mysql> SHOW VARIABLES LIKE '%time_zone%';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| system_time_zone | UTC |
| time_zone | UTC |
+------------------+-------+
2 rows in set (0.00 sec)
据此,该值在当前时区中给出,您的提供者之一:
FROM_UNIXTIME(unix_timestamp), FROM_UNIXTIME(unix_timestamp,format):
Returns a representation of the unix_timestamp argument as a value in 'YYYY-MM-DD HH:MM:SS' or YYYYMMDDHHMMSS.uuuuuu format, depending on whether the function is used in a string or numeric context. The value is expressed in the current time zone. unix_timestamp is an internal timestamp value such as is produced by the UNIX_TIMESTAMP() function.
( https://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html#function_from-unixtime )
但你可以试试这个:
SET time_zone='+10:00';
SELECT FROM_UNIXTIME(1442987399);