java - 如何通过 joda 中的 id 知道时区与 GMT 的偏移量?

标签 java mysql jodatime

我有一个 MySQL 数据库,其中一列的类型为 DATETIME 并将值存储在 IST 中(因为我的服务器时区是 IST)。

我从用户那里获取了 EST 中的两个字符串,我需要将数据库中的日期部分与该列进行匹配。

我正在使用此查询:

SELECT * FROM my_table where date(convert_tz(`myDate`,'+05:30','-05:00'))
between  '2012-12-01' and '2012-12-02';

注意:在我的数据库中 mysql.time_zone 是空的,这意味着我不能在查询中使用诸如GMT字符串,他们指示我下载一个包,但我不想下载它,我可以使用00:05`,因为我将用 Java 构建我的查询。

这个查询运行良好,因为我已经硬编码了时区偏移量(对于EST

但我担心此查询会为夏令时日期(即 EDT)提供错误的数据。

那么我如何获得时区差异(意味着它应该返回 '-05:00' 为 EST 和 '-04:00 为 EDT ),以便我可以在 java 中构建查询字符串时直接使用它们。

我的查询字符串可能如下所示:

SELECT * FROM my_table where date(convert_tz(`myDate`,'+05:30','???')) 
between '2012-12-01' and '2012-12-02';

我想要 ??? 的值使用准备好的语句动态分配。

我正在使用 Joda Time API,但对其了解不多,不知道它是否有可以返回给定时区字符串的时区offser的东西。

最佳答案

我建议:

  • 为了保持理智,您开始将值存储为 UTC。 (数据不应取决于服务器的位置。)
  • 您可以在 Java 中计算起点/终点的 UTC 值(使用正确时区设置的 DateTime,然后转换为 UTC)
  • 您可以通过 SQL 参数将 UTC 开始/结束时间直接传递到查询中(不要在 SQL 文本中包含这些值),并避免数据库进行任何转换

如果您确实无法更改数据库以使用 UTC,则应该将“目标时区”值转换为 IST 值,并将这些值传递到数据库。同样,查询不需要进行转换:而是预先转换您的输入。

关于java - 如何通过 joda 中的 id 知道时区与 GMT 的偏移量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13879348/

相关文章:

java - 仅创建从 BLUEJ 到 EXE 文件的返回方法

java - 为什么 TextView 设置文本不能与 int 一起使用?

java - JodaTime 第一次调用时非常慢

java - 尝试使用JavaMail

java - 融合位置崩溃

php - Mysql Select 去年但不是今年的事件

php - 如何计算使用php mysql的节点数

mysql - 即使该列存在于 mysql 表中,也会出现未知列错误

java - 如何模拟 JodaTime 实际日期?

java - 将字符串转换为 iso 日期格式