MySQL拒绝返回24小时 - 所有时间都在12小时内修改

时间:2015-09-23 06:10:05

标签: mysql date timestamp

我们的生产MySQL服务器拒绝以24小时格式返回时间,而是选择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/

  

您所在的时区:2015年9月23日下午3:49:59 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)

1 个答案:

答案 0 :(得分:2)

根据这一点,该值在当前时区(您的提供者之一)中给出:

  

FROM_UNIXTIME(unix_timestamp),FROM_UNIXTIME(unix_timestamp,format):

     

返回unix_timestamp参数的表示形式,作为值   ' YYYY-MM-DD HH:MM:SS'或YYYYMMDDHHMMSS.uuuuuu格式,取决于   函数是在字符串还是数字上下文中使用。价值   以当前时区表示。 unix_timestamp是一个内部的   时间戳值,例如由UNIX_TIMESTAMP()函数生成的。

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);