在我的数据库中,updateTime设置为TIMESTAMP和CURRENT_TIMESTAMP。但当我显示数据时,数据库中记录的时间不是我的本地时区,而是3小时后。如何通过转换此SQL语句来减去这3个小时?我可以以某种方式将CONVERT_TZ与此语句内联使用吗?我不知道怎么做。
SELECT updates.updateID, updates.windowStatus, updates.onDeck, updates.updateComments, TIME_FORMAT(`updateTime`,'%r') AS showtime FROM updates ORDER BY updates.updateID DESC LIMIT 1
每个客户端(每个连接)都可以设置服务器时区,以便在UTC以外的其他TZ中接收数据。为了做到这一点,你只需要使用:
SET time_zone = timezone;
timezone
的值可以作为UTC的偏移量("+10:00"、"-6:00"…)或命名时区(如"欧洲/赫尔辛基"、"美国/东部"或"MET")给出。因此,如果我没有弄错的话,你可以设置自己的TZ,以便在"+3:00"接收你的数据。
请注意,mysql服务器所做的偏移只会影响NOW()
、CURTIME()
以及存储在TIMESTAMP
列中和从中检索的值(这就是您要查找的)。
否则你可以使用
SELECT @@global.time_zone, @@session.time_zone;
以获取全局时区和特定于客户端的时区。
更多相关信息(这实际上是我所写内容的总结)在:时区支持(mysql.com).
在你的情况下,你可以有这样的东西:
<?php
mysql_select_db($database_casualconnnect, $casualconnnect);
$set_tz_query = "SET time_zone = '+1:00'";
mysql_query($set_tz_query, $casualconnnect) or die(mysql_error());
$query_Recordset2 = "SELECT updates.updateID, updates.windowStatus,
TIME_FORMAT(`updateTime`,'%r') AS showtime, updates.onDeck, updates.updateComments
FROM updates ORDER BY updates.updateID DESC LIMIT 1";
$Recordset2 = mysql_query($query_Recordset2, $casualconnnect) or die(mysql_error());
$row_Recordset2 = mysql_fetch_assoc($Recordset2); $totalRows_Recordset2 = mysql_num_rows($Recordset2);
?>