我尝试了以下内容,因此我可以根据我的时区"Africa/Johannesburg"
或GMT+2:00
获取日期,但Google服务器始终使用自己的时区返回时间,该时区比我的时区落后2小时。
我做了FF:
在appengine-web.xml
我已设置
<property name="user.timezone" value="Africa/Johannesburg"/>
在创建Date对象
之前,我还尝试了TimeZone.setDefault(TimeZone.getTimeZone("GMT+2:00"));
在我的servlet的init方法中,我也试过
@Override
public void init() throws ServletException {
TimeZone.setDefault(TimeZone.getTimeZone("GMT+2:00"));
}
但这件事不会起作用。因为JDK日期不是线程安全的,所以我使用JodaTime,效果很好,事实上当我new DateTime(DateTimeZone.forID("Africa/Johannesburg"))
时我得到正确的时间但是对于遗留问题,我必须将日期存储在JDK日期,因此必须将Joda转换为JDK Date通过调用.Date(),然后时间完全搞砸了错误的时区。
有没有人偶然知道如何设置它而不必减去小时差异。
答案 0 :(得分:2)
你做不到。系统时区不可更改。您应该将所有日期存储在unix时间,并使用您的时区将它们转换为日期或日历对象。我也不会认为GAE总是会使用相同的时区...
答案 1 :(得分:0)
当您在数据存储中保存任何日期时,它将保存在您在JVM中设置的timeZone中,这就是为什么在启动应用程序之前我始终将其设置为UTC:
//To avoid difference of dates depending on where the server is located
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
尽管如此,当您在gcloud控制台中浏览数据存储区时,它将显示在您当地的时区中(可能它会获取浏览器时区并根据您的需要调整响应)。但是当你查询它时,计数中的日历日期将是你用来保存日历的日期(在我的情况下是UTC)。