我的显示时间存储在所有东部和ID时区设置表中。时区设置表具有Timezone_id,GMT偏移量和时区名称。
GMT偏移量存储为+ 6,-4,+ 3.5,-4.5等
我正在尝试编写一个查询来将showtime转换为其原始时区。我这样做。
SELECT Date_format( CONVERT_TZ( CONVERT_TZ(A.START_TIME, '+00:00', '-5:00'),
'+00:00', CONCAT(B.GMT_OFFSET , ':00' )), '%Y-%m-%e %r:%i')
AS 'start_time' from shows A, tz_settings B AND <<JOINS>>;
我在这里做的是首先将时间从ET转换为GMT,然后应用GMT偏移量。
START_TIME的日期格式为'2012-4-23 10:15:00' 另外,还有一个问题是将“3.5”等格式转换为“3.30”以传递给Convert_TZ
编辑:表格结构。主要领域。
shows: 'id', 'show_name', 'stat_time', 'tz_id'
tz_settings: 'tz_id', 'gmt_offset','tz_name'
有什么想法吗?任何其他功能都有助于混合?
答案 0 :(得分:1)
不知道你遇到的问题是什么,但我只是用你的结构构建2个MYSQL表:
MySQL表格
TABLE shows ['id', 'show_name', 'start_time', 'tz_id']
TABLE tz_settings ['tz_id', 'gmt_offset','tz_name']
使用此MySQL查询:
SELECT Date_format( CONVERT_TZ( CONVERT_TZ( A.START_TIME, '+00:00', '-5:00' ) , '+00:00', CONCAT( B.GMT_OFFSET, ':00' ) ) , '%Y-%m-%e %r:%i' ) AS 'start_time'
FROM shows A, tz_settings B
WHERE A.id =1
AND B.tz_id = A.tz_id
结果符合预期!
无论如何,您应该使用它的完整格式存储GMT OFFSET以简化查询,从而失去CONCAT并提高性能。 例如:代替+5,存储+05:00
这对你有什么帮助吗?
已编辑包含MYSQL并取消
SELECT Date_format( CONVERT_TZ( CONVERT_TZ( A.STAT_TIME, '+00:00', '-5:00' ) , '+00:00', if( B.GMT_OFFSET LIKE '%.5', REPLACE( B.GMT_OFFSET, '.5', ':30' ) , CONCAT( B.GMT_OFFSET, ':00' ) ) ) , '%Y-%m-%e %r:%i' ) AS 'start_time'
FROM shows A, tz_settings B
WHERE A.`id` =1
AND B.`tz_id` = A.`tz_id`
因此,如果存储的GMT OFFSET为.5,它将被替换为:30,否则,它会将:00附加到现有值。 (经过测试并按预期返回值)