首页 > 解决方案 > 将 MySQL 日期四舍五入到最接近的时间间隔,而不受夏令时更改的影响

问题描述

SET @time := '2018-11-08 00:36:50.000000';
SET @intervalInMinutes := 15
SELECT FROM_UNIXTIME((Select FLOOR ((select UNIX_TIMESTAMP(@time) / (@intervalInMinutes* 60))) * (@intervalInMinutes*60)));

我需要在 MySQL 中编写一个查询,将日期/时间转换为用户指定的最近间隔类别。例子:

我已经编写了上面的查询,它似乎工作正常。但是,通过这篇文章,第一个答案有一条评论,指出这种方法将失败的日期时间介于夏令时之间。我没有得到他指定的例子。对于我的情况,我在该线程上注意到的其他方法看起来更加复杂。我试图了解这将如何影响我的情况。任何建议/示例表示赞赏。或者,是否有更好的方法通过编写更简单的查询来避免这种情况?PS 我希望这适用于 MySQL 5.6、5.7 和 8.0。

标签: mysqldatetimeunix-timestamptimestamp-with-timezone

解决方案


在 MySQL 数据库中解释了使用将 datetime 转换为 unixtime 并返回时可能遇到的问题。

所以为了安全起见,我会使用另一种方法:

SET @time := '2018-11-08 00:36:50.000000';
SET @intervalInMinutes := 15;
SELECT TIMESTAMP(DATE(@time), SEC_TO_TIME(FLOOR(TIME_TO_SEC(TIME(@time)) / (@intervalInMinutes * 60)) * (@intervalInMinutes * 60)));

这个想法非常相似:您将时间转换为秒,四舍五入并转换回来。


推荐阅读