首页 > 解决方案 > 部署的应用程序在 AWS 服务器上选择通用时间而不是本地时间

问题描述

目前,我的 AWS 实例显示低于时间

timedatectl status
            **Local time:** Thu 2019-12-26 19:41:51 IST
            Universal time: Thu 2019-12-26 14:11:51 UTC
            RTC time: Thu 2019-12-26 14:11:51
            Time zone: Asia/Kolkata (IST, +0530)
       System clock synchronized: yes
       systemd-timesyncd.service active: yes
       RTC in local TZ: no

波乔

@Entity
@Table(name = "hotel_booking")
public class Booking implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    private Long id;

    @Id
    private Integer version;

    @NotNull
    @Column(name = "ota_reference_no", nullable = false)
    private String referenceNo;

    @Column(name = "guest_name")
    private String guestName;

    @Column(name = "created_date", columnDefinition = "timestamp", nullable = false)
    private LocalDateTime createdDate;

    @Column(name = "modified_date", columnDefinition = "timestamp")
    private LocalDateTime modifiedDate;

======

一旦坚持 createdDate 提交选择 Universal time 但需要的是Local time

在 localhost 中获得相同的预期结果:

数据库使用:Postgres(即本地安装在AWS实例上)

标签: javapostgresqlamazon-web-servicesamazon-lightsailamazon-linux

解决方案


如果这是(或将成为)一个真正的应用程序,请帮自己一个忙,并始终将时间轴(或实际时刻)上的任何实际点保留在其中UTC——您实际上可以使用该Instant类型在您的应用程序中直接获得这一点。下线,您可以使用ZonedDateTime(或LocalDateTime,但这个很棘手)在将值暴露给用户代理之前相应地“翻译”这些值 - 或者对于您可能正在执行的任何其他操作,这可能是时区敏感的.

顺便说一句,你得到的原因Universal time而不是Local time它是因为 Java 虚拟机、应用程序、你用于持久性(或组合)的框架是以这种方式设置的,或者默认情况下,或者因为某处在应用程序中有这样的设置:-Duser.timezone=UTC. 如果是应用程序,它可能是ZoneOffset.UTCor TimeZone.setDefault(...),但这些不太可能,因为您需要以编程方式执行此操作。执行 a System.out.println(ZoneId.systemDefault()),它应该产生UTC(或这些行附近的东西)。


推荐阅读