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