0

我有一个 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中是空的,这意味着我不能使用strings likeGMT etc in my query, they instructed me to download a package, but I don't want to download it, its fine for me to use00: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。

4

1 回答 1

2

我建议:

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

如果您真的,真的不能将数据库更改为使用 UTC,则应该将“目标时区”值转换为 IST 值,然后将其传递数据库。同样,查询不需要进行转换:改为预先转换您的输入。

于 2012-12-14T13:15:15.750 回答