我有一个进程将使用数据库中的数据处理作业的调度。用户可以在设置作业的执行日期/时间时选择他们的时区。
我需要能够在用户的时区和服务器的时区之间进行转换。
我不想硬编码服务器的时区。请参阅下面的代码以查看我的问题。
我检查了时区表是否可用并且有数据。
以下查询仅返回“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