【问题标题】:How to set timezone in quarkus to UTC如何将quarkus中的时区设置为UTC
【发布时间】:2020-05-10 18:18:21
【问题描述】:

我正在使用 quarkus 1.2.0。

一般:

客户端浏览器正在向服务器请求数据。服务器(Quarkus 应用程序)正在从客户端接收 UTC 时间。 (好的)现在服务器应该将数据库中的数据与客户端浏览器时间进行比较,并返回数据库中的所有数据,这是在客户端时间之后。

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

问题:

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

如何强制 quarkus 使用 UTC 时区?

【问题讨论】:

    标签: quarkus


    【解决方案1】:

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

    import javax.ws.rs.core.Application;
    import java.util.TimeZone;
    
    
    public class YourApplication extends Application {
    
        public YourApplication() {
            super();
            TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
        }
    }
    

    【讨论】:

      【解决方案2】:

      您在执行 jar 时是否尝试过传递 -Duser.timezone=UTC

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

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

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

      我只是不完全确定您的申请是否足够早。你必须尝试一下。

      【讨论】:

      • 是的,我试过了。这种方法的几个问题: 1. 当我直接运行 jar 时,这是有效的。当我在 quarkus 开发模式下编程和测试我的应用程序时,这不起作用。 Quarkus 开发模式忽略了这个属性(对我来说似乎是一个错误) 2. 我想在程序中设置 UTC。因为每个客户端请求都以 UTC 格式输入,所以我想在服务器上强制使用 UTC,而不需要任何用户交互
      • 我在答案中添加了另一个选项。
      • 通过启动事件的程序化方法不起作用(不再?)。还有其他解决方案吗?
      • 你能用你正在尝试做的事情的复制者创建一个 GitHub 问题吗?
      • 不确定开发模式问题是否已解决,您也可以在应用程序类中设置此项 `System.setProperty("user.timezone", "UTC");`
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-16
      • 2020-07-08
      • 2017-10-10
      相关资源
      最近更新 更多