在 MySQL 中使用夏令时处理不明确的日期时间
当发生夏令时 (DST) 时,会出现一个不明确的时间,这很困难以确定预期的时间参考。例如,在美国/纽约时区,秋季过渡期间凌晨 1:30 可能出现两次。
问题:
MySQL 的 DATETIME 和 TIMESTAMP 字段呈现唯一的在处理这些模棱两可的时期时面临着挑战。 DATETIME 字段按原样存储日期和时间,不考虑时区或 DST 转换。 TIMESTAMP 字段将输入时间戳转换为 UTC,反之亦然。
解决方案:
1.使用 DATETIME 字段:
将时间戳转换为 UTC,然后将其存储在 DATETIME 字段中。这可确保您可以控制要保存的准确 UTC 时间。
2.检索数据的解释:
将从 DATETIME 字段检索的时间戳解释为 MySQL 外部的 UTC 时间戳。这可以防止 MySQL 的日期/时间函数引入歧义。
3.避免使用 TIMESTAMP 字段:
避免使用 TIMESTAMP 字段,因为在涉及 DST 时,它们可能会导致本地时间和 UTC 之间的转换不一致。
实现:
检索中数据:
// Example using PHP's DateTime class $timestamp = strtotime($db_timestamp . ' UTC');
存储数据:
// Example using PHP's DateTime class $UTCDateTime = new DateTime('2009-11-01 1:30:00 EST'); $db_timestamp = $UTCDateTime->format('Y-m-d H:i:s');
注意事项:
以上是MySQL 如何处理夏令时转换期间不明确的日期时间?的详细内容。更多信息请关注PHP中文网其他相关文章!