不同时区的MySql应用程序给出不同的结果

时间:2016-04-18 23:41:11

标签: java mysql datetime timezone jodatime

当然,标题是预期的结果,但我不确定如何解决它。我的生产服务器在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的唯一选项吗?

2 个答案:

答案 0 :(得分:2)

使用查询设置连接的时区:

SET SESSION time_zone = 'UTC'

您可以省略SESSION - 将系统变量默认设置为会话变量。请参阅SET Syntax文档。

如果您没有在数据库中配置时区信息,请参阅convert_tz returns null

您还可以使用数字时区:

SET time_zone = '+00:00'

答案 1 :(得分:0)

您可以使用以下代码获取UTC / GMT DateTime

System.out.println( "UTC/GMT date-time in ISO 8601 format: " + new org.joda.time.DateTime( org.joda.time.DateTimeZone.UTC ) );