你可以手动进行转换;如果你已经将区域数据加载到MySQL中,那么你的数据已经回到了1918年.让我们来看看列表:
SET @timezone = "America/Toronto";
SELECT FROM_UNIXTIME(0) + INTERVAL Transition_Time SECOND AS change_time,Offset,Abbreviation
FROM mysql.time_zone_transition t
LEFT JOIN mysql.time_zone_transition_type tt ON (
t.Time_zone_id = tt.Time_zone_id AND
t.Transition_type_id = tt.Transition_type_id
)
LEFT JOIN mysql.time_zone_name n ON (
t.Time_zone_id = n.Time_zone_id
)
WHERE n.Name = @timezone
AND Transition_time < 0
ORDER BY change_time ASC;
修改您的样本日期,我们可以提取:
SET @timezone = "America/Toronto";
SET @birthday = -73440000;
SELECT ('1970-01-01 00:00:00' + INTERVAL @birthday SECOND) + INTERVAL Offset SECOND AS offsetDate
FROM mysql.time_zone_transition t
LEFT JOIN mysql.time_zone_transition_type tt ON (
t.Time_zone_id = tt.Time_zone_id AND
t.Transition_type_id = tt.Transition_type_id
)
LEFT JOIN mysql.time_zone_name n ON (
t.Time_zone_id = n.Time_zone_id
)
WHERE n.Name = @timezone
AND Transition_time < @birthday
ORDER BY Transition_time DESC
LIMIT 1;
由于它在日期之前选择最近的转换,因此它将不返回第一次转换之前的日期的记录.这应该作为一个指标,表明你处于未知状态并且必须弥补自己的偏移量.
如果您想将第一个转换时间用作后备,则可以删除Transition_time