【发布时间】:2016-04-18 23:41:11
【问题描述】:
当然,标题是预期的结果,但我不知道如何修复它。我的生产服务器在 MST 中运行 MySql。我在 EST 本地测试我的应用程序。
我们正在使用 Joda 时间。麻烦就在这里:
DateTime nowTime = new DateTime();
DateTime endTime = myObject.getEndTime();
Duration duration = new Duration(nowTime, endTime);
if(duration.getStandardMinutes() < 15) {
//do something time critical
}
当然,当应用程序在 MST 中运行时,这可以正常工作,但对于运行 EST 的本地应用程序,它会因时区差异而关闭。
有谁知道如何解决这个问题?假设更改 MySql 服务器上的默认时区不是一个选项,因为我们有共享它的旧应用程序。理想情况下,我们可以将时区设置为 GMT,这样我们就可以获得 UTC 时间。
编辑:有谁知道是否有任何方法可以避免在检索时从 UTC 更改为当前时区(参见文档下方的粗体)?
当前会话时区设置会影响 区域敏感的时间值。这包括价值观 由 NOW() 或 CURTIME() 等函数显示,以及存储的值 在 TIMESTAMP 列中并从中检索。 TIMESTAMP 列的值 从当前时区转换为 UTC 进行存储,并从 UTC 到当前时区进行检索。
或者是在检索后 以编程方式将其转换回 UTC 的唯一选择吗?
【问题讨论】:
-
您可以在 MySQL 中设置每个连接的时区。
-
或者你可以在 MySQL 中使用
convert_tz()。 dev.mysql.com/doc/refman/5.5/en/… -
@Barmar 你可以吗?我似乎找不到任何关于如何做到这一点的文档。如果可以的话,我相信这就是解决方案。
-
@Barmar 每个连接字符串都比修改每个 sql 存储过程来做到这一点要好。
-
SET SESSION time_zone = xxx
标签: java mysql datetime timezone jodatime