我有一个数据库,它以utc格式存储来自gps跟踪器的日期时间。例如:
CREATE TABLE IF NOT EXISTS `tab_data` (
`id` int(6) unsigned NOT NULL,
`utc_time` varchar(200) NOT NULL,
PRIMARY KEY (`id`)
) DEFAULT CHARSET=utf8;
INSERT INTO `tab_data` (`id`, `utc_time`) VALUES
('1', '2018-01-05 07:00:00'), //this should be in UTC +1
('2', '2018-02-04 01:10:00'), //this should be in UTC +1
('3', '2018-07-01 15:00:00'), //this should be in UTC +2
('4', '2018-08-22 16:00:00'); //this should be in UTC +2
我想做的是在适当的时间从数据库中获取波兰的数据。在波兰和欧洲许多国家一样,我们有夏季和冬季时间:-冬季是cet时区(utc+1)-夏季是cest时区(utc+2)
如何将此日期时间从数据库转换为正确的时间(+1或+2h)
通常我会使用这个查询,但这个时间必须转换为一年中适当时间适用的时区
SELECT `utc_time` AS time FROM `tab_data`;
我知道这是选项convert\u tz,但据我所知,我只能从一个时区转换到另一个时区,而不是从两个不同的时区。
这是sql小提琴http://sqlfiddle.com/#!9/a09700/2号机组
如果这在mysql中很难实现,我也可以在php中实现
2条答案
按热度按时间pftdvrlh1#
除非我遗漏了什么,否则convert\u tz()正是您所需要的:
演示
唯一的缺点是,许多服务器似乎缺少使用命名时区的适当配置(不确定您是否关心这个问题)。
php替代方案应该是开箱即用的:
演示
p、 如果你的gps跟踪器始终生成相同的数据格式,实际上没有理由使用
VARCHAR
因为它是mysql所期望的精确日期格式。9fkzdhlc2#
这个代码对你有用吗?
选择
utc_time
作为utc时间,转换为(utc_time
“utc”、“cet”)作为本地时间tab_data
;