mysql - UTC 数据库中 IST 数据按小时求和值

标签 mysql timezone

我的数据库在 UTC 时区和 UTC 时间插入数据。我想对 IST 时间数据的所有值求和并按小时分组。如下所示,

id  data_id value serverTime
1   2       100   2016-05-02 18:30:54
2   2       100   2016-05-02 18:45:54
4   2       200   2016-05-02  19:00:54
5   2       100   2016-05-02 19:15:54
6   2       100   2016-05-02 19:30:54
7   2       100   2016-05-02  19:40:54 

查询

select sum(value) as value, serverTime as date
from Data_table 
where data_id=2 
and serverTime between CONVERT_TZ('2016-05-03 00:00:01','+00:00', '-05:30') 
and CONVERT_TZ('2016-05-03 10:45:24','+00:00', '-05:30') 
group by year(date),month(date),week(date),day(date),hour(date);

上面的查询给出的结果是:

200    
500

但期望输出:

600    
100

因为 IST 12 AM = UTC- 05:30 这意味着 18:30 到 19:30 但这里我的查询只计算 18:30 到 19 :0019:00 到 20:0020:00 到 21:00 这不是准确值。

我想计算 18:30 到 19:3019:30 到 20:30 的 IST 时间数据精度值。

如何解决?

最佳答案

IST,我假设您指的是印度标准时间,比 UTC 早 5 小时 30 分钟。作为固定偏移量,这将是 +05:30,而不是 -05:30。您的结果不正确,因为您的符号倒置了。

CONVERT_TZ 函数接受任何:

  • 'SYSTEM' 本地系统时区
  • 标准 ISO 8601 format 中的固定偏移量,它具有 UTC 的正偏移量 East,例如印度的 '+05:30''-10: 00' 代表夏威夷。
  • 命名时区,使用标准 IANA/Olson TZDB identifiers ,假设时区表已填充。印度的时间是 'Asia/Kolkata',美国东部时间是 'America/New_York',等等。使用此选项需要根据 the documentation 填充 mysql 时区表。

一般来说,命名时区是首选,因为它们可以适应由于夏令时和历史变化而导致的偏移量变化。然而,印度自 1942 年以来一直固定在 +05:30,并且在不久的将来不太可能改变,因此如果这是您需要的唯一时区,使用固定偏移方法是合理的处理。

另请注意,与许多 time zone abbreviations 一样,“IST”是不明确的。它可以表示印度标准时间 (+05:30)、爱尔兰标准时间 (+01:00) 或以色列标准时间 (+02:00)。另请注意,爱尔兰标准时间实际上是一个夏令时 时区偏移量,尽管其中有名称“Standard”。为避免混淆,请在以后提及 IST 时指定您的具体位置,不要指望计算机能够区分它们。

关于mysql - UTC 数据库中 IST 数据按小时求和值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37115418/

相关文章:

ruby-on-rails - rails的utc_to_local和夏令时

java - 如何在tomcat中设置Oracle时区区域

JavaScript:如何将 UTC 日期/时间转换为山区时间?

php - 准备好的语句获取 ‘SQLSTATE[HY093]: Invalid parameter number: parameter was not defined’ PHP

php - 从三个值数组计算当前库存

php - Mobiweb 短信提供商 自动 dlr 转发

java - 获取启用时区的 DateTime 实例的字母数字月份值

java - 格式化 XmlGregorianCalendar 时区问题

MySQL INSERT INTO ... SELECT 抛出错误 1064

php - 停止 mysql 操作,直到所有操作都返回 true