我们的生产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)
答案 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);