如何将quarkus中的时区设置为UTC

How to set timezone in quarkus to UTC

我正在使用 quarkus 1.2.0。

一般:

客户端浏览器正在向服务器请求数据。服务器(Quarkus 应用程序)正在从客户端接收 utc 时间。 (ok) 现在服务器应该将数据库中的数据与客户端浏览器时间进行比较,并且应该 return 数据库中的每个数据都在客户端时间之后。

我有 postgres 作为数据库。每次我将新数据保存或将数据修改到数据库中时,我都会使用 UTC 时间保存数据。 我在 persistence.xml 中使用 <property name="hibernate.jdbc.time_zone" value="UTC"/> 强制执行此操作。 我已经检查过了,数据以 utc 时间保存在 postgres 数据库中。

问题:

虽然数据库中的数据是以utc格式保存的,但是当quarkus从数据库中获取数据时,它会将数据传输到本地时区(GMT +0100)。 现在我的问题是服务器正在将转换为 (GMT) 的数据与客户端时间 (UTC) 进行比较。

如何强制 quarkus 使用 UTC 时区?

你试过在执行你的 jar 时通过 -Duser.timezone=UTC 吗?

Quarkus 应用只是一个标准的 Java 应用。

另一种选择是通过创建观察启动事件的 CDI bean 直接在您的应用程序中进行设置:

@Singleton
public class TimezoneSettings {

    public void setTimezone(@Observes StartupEvent startupEvent) {
        System.setProperty("user.timezone", "UTC");
    }
}

不过,我只是不完全确定您的申请是否足够早。您将不得不尝试一下。

此解决方案也适用于 quarkus 开发模式:

import javax.ws.rs.core.Application;
import java.util.TimeZone;


public class YourApplication extends Application {

    public YourApplication() {
        super();
        TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
    }
}

如果使用休眠:https://quarkus.io/guides/all-config

quarkus.hibernate-orm.jdbc.timezone=UTC