Java 谷歌应用引擎-GAE不会设置默认时区

Java 谷歌应用引擎-GAE不会设置默认时区,java,google-app-engine,Java,Google App Engine,我尝试了以下方法,以便根据我的时区(即“非洲/约翰内斯堡”或GMT+2:00获取日期,但谷歌服务器总是使用自己的时区返回时间,该时区比我的时区晚2小时 我已经完成了FF: 在appengine web.xml中,我设置了 <property name="user.timezone" value="Africa/Johannesburg"/> 但这件事不会只起作用。因为JDK date不是线程安全的,所以我使用的是JodaTime,它工作得很好,事实上当我使用新的DateTime(D

我尝试了以下方法,以便根据我的时区(即
“非洲/约翰内斯堡”
GMT+2:00
获取日期,但谷歌服务器总是使用自己的时区返回时间,该时区比我的时区晚2小时

我已经完成了FF:

appengine web.xml
中,我设置了

<property name="user.timezone" value="Africa/Johannesburg"/>
但这件事不会只起作用。因为JDK date不是线程安全的,所以我使用的是JodaTime,它工作得很好,事实上当我使用新的DateTime(DateTimeZone.forID(“Africa/约翰内斯堡”)时,我得到了正确的时间,但对于遗留问题,我必须将日期存储在JDK date中,因此必须通过调用.date()将Joda转换为JDK date,然后时间完全被错误的时区搞砸了


是否有人碰巧知道如何设置此值而不必减去小时差。

你不能。系统时区不可更改。您应该将所有日期存储在unix时间中,并使用时区将其转换为日期或日历对象。我也不会假设GAE总是使用相同的时区

当您在数据存储中保存任何日期时,它将保存在您在JVM中设置的时区中,这就是为什么在启动应用程序之前,我总是将其设置为UTC:

//To avoid difference of dates depending on where the server is located
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));

尽管如此,当您在gcloud控制台中浏览数据存储时,它将显示在您的本地时区中(可能会获取浏览器时区并根据您的需要调整响应)。但是,当您查询回来时,计数中的日历日期将是您用于保存它的日期(在我的情况下是UTC)。

在我的应用程序中,从
DateTime
转换为
date
是有效的。但是,在数据存储中,它存储为UTC,但如果您知道这是正常的。也许你应该将时区和日期一起保存,并在阅读时转换。谢谢你的回复,你介意显示你的索赔来源吗?感谢在python中,文档状态日期时间值存储为,并使用UTC时区返回。有关如何管理时区的讨论,请参阅datetime.datetime。Java也一样。
//To avoid difference of dates depending on where the server is located
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));