2

我已经尝试了以下方法,所以我可以根据我的时区获取日期,"Africa/Johannesburg" 或者GMT+2:00但谷歌服务器总是使用比我晚 2 小时的自己的时区返回时间。

我已经完成了FF:

appengine-web.xml我已经设置

<property name="user.timezone" value="Africa/Johannesburg"/>

TimeZone.setDefault(TimeZone.getTimeZone("GMT+2:00"));在创建 Date 对象之前我也尝试 过

在我的 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 日期。日期(),那么时间完全搞砸了错误的时区。

有没有人偶然知道如何设置它而不必减去小时差。

4

2 回答 2

1

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

于 2013-05-21T15:01:29.627 回答
0

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

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

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

于 2018-04-02T17:32:37.963 回答