我有一个进程可以处理数据库中数据的作业调度。用户可以在设置作业的执行日期/时间时选择他们的时区。
我需要能够在用户的时区与服务器的时区之间进行转换。
我不想硬编码服务器的时区。请参阅下面的代码以查看我的问题。
我已经检查过时区表是否可用且有数据。
以下查询仅返回“EDT”:
select IF(@@session.time_zone = 'SYSTEM', @@system_time_zone, @@session.time_zone)
但我无法成功将EDT传回convert_tz。请通过以下查询来证明我的问题。
select schedule_time,
time_zone,
convert_tz(schedule_time,'US/Eastern','US/Pacific') 'convert_tz1',
convert_tz(schedule_time,'EST','PST') 'convert_tz2'
from batch_control
以下是返回:
2013-08-27 01:00:00 EST 2013-08-26 22:00:00 NULL
2013-08-26 01:00:00 EST 2013-08-25 22:00:00 NULL
2013-08-26 01:00:00 EST 2013-08-25 22:00:00 NULL
2012-09-28 15:22:00 EST 2012-09-28 12:22:00 NULL
2012-10-15 09:52:00 EST 2012-10-15 06:52:00 NULL
我很困惑为什么我不能从mysql本身获取时区值输出并将其传回convert_tz函数。
我的最终代码是这样的:
select convert_tz(schedule_time,time_zone,IF(@@session.time_zone = 'SYSTEM', @@system_time_zone, @@session.time_zone)) 'execute_time'
from batch_control