最佳答案
MySQL 能否在普通的 select 语句中直接将存储的 UTC 时间转换为本地时区时间?
假设您有一些带有时间戳(UTC)的数据。
CREATE TABLE `SomeDateTable` (
`id` int(11) NOT NULL auto_increment,
`value` float NOT NULL default '0',
`date` datetime NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (`id`)
)
然后当我
"select value, date from SomeDateTable";
当然,我得到的所有日期都是以它们存储的 UTC 格式表示的。
但是,让我们说,我希望他们在另一个时区(与 DST) , 然后,我可以添加一些魔术的选择查询,以便我得到所有的日期回到选定的时区?
"select value, TIMEZONE(date, "Europe/Berlin") from SomeDateTable";
或者我必须在顶部的其他层中执行这个操作,比如在某些 PHP 代码中? (这似乎是大多数人解决这个问题的方法)。
如果您的 MySQL 安装允许您使用 CONVERT _ TZ,这是一个非常干净的解决方案, 这个例子展示了如何使用它。
SELECT CONVERT_TZ( '2010-01-01 12:00', 'UTC', 'Europe/Stockholm' )
然而,我不知道这是否是一个好方法,因为一些 MySQL 安装缺少这个功能,谨慎使用。