如何按日期分组,计算时区和夏令时?

mpe*_*pen 6 mysql timezone datetime

我有一堆事件存储在我的数据库中.每个事件都有一个开始时间,DATETIME以UTC格式存储.每个用户都可以选择自己的时区.

我想显示一个日历,它只显示每月每天的事件数量.我不能,GROUP BY DATE(start_dt)因为用户的日子不一定[必然]在00:00:00 UTC开始.此外,用户的时区可能在月中有一个DST开关.

那么我唯一的选择是获取给定月份的每个事件,然后使用我的服务器端语言对它们进行分组和计数吗?

mpe*_*pen 14

你可以试试

SELECT ... FROM ... GROUP BY DATE(CONVERT_TZ(start_dt,'UTC','America/Vancouver'))
Run Code Online (Sandbox Code Playgroud)

请注意,在此工作之前,您需要将时区数据加载到MySQL中.

  • @RandomSeed问题是DST.月初的偏移量可能与月末的偏差量不同. (4认同)
  • 或者使用数字偏移作为`CONVERT_TZ()`的第三个参数([手册](http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html#function_convert- tz)),因此它不需要时区表,例如.`CONVERT_TZ('2004-01-01 12:00:00','UTC','+ 10:00');` (3认同)
  • @RandomSeed您在您的示例中没有犯错。应该是:CONVERT_TZ('2004-01-01 12:00:00','+ 00:00','+ 10:00');`,因为仍然使用`UTC`而不是`+00:00`结果导致“ NULL”。 (3认同)