【问题标题】:deactivate the impact of time zone to save LocalDateTime停用时区的影响以保存 LocalDateTime
【发布时间】:2021-05-29 14:57:15
【问题描述】:

我使用 jhipster springboot 和 angular 7

我在将时刻日期从前端发送到后端时遇到问题。

我有这个例子:

 var dateObj = '2021-08-5';
    var momentObj = moment(dateObj);
    var momentString = momentObj.format('YYYY-MM-DD');
    this.student.startdateJc= moment(momentString);

日期以这种格式发送: 在后端我有这个代码:

 student.setStartdateJc(studentDTO.getStartdateJc());

我发现在java代码中保存到数据库之前的日期(studentDTO.getStartdateJc()) 是 2021-08-4T21:00

存入数据库后列中的日期为2021-08-4 18:00:00

表示日期从前端到后端减少了 3 小时,其他时间减少了 3 小时以保存在数据库中

数据库中的列类型为:startdate_jc timestamp without time zone,

在java代码中:Student.java

 @Column(name = "startdate_jc")
    private LocalDateTime startdateJc;

StudentDTO.java

private LocalDateTime startdateJc;

我在 application.yml

中有这个配置
 jpa:
        open-in-view: false
        properties:
            hibernate.jdbc.time_zone: UTC

我的服务器和客户端的时区是(UTC+03:00) Kuwait, Riyadh

我想在数据库中保存这个日期 2021-08-5 00:00:00

所以从前端和后端停用时区的影响

【问题讨论】:

  • 您的代码很奇怪,为什么在JSON序列化之前将日期作为字符串存储在学生中?你也剥夺了时间。

标签: angular momentjs jhipster


【解决方案1】:

一种方法是将其存储为 Unix 时间戳(只是一个数字)。然后您可以轻松地将其转换为您想要的任何与时区相关的日期格式。我会推荐这种方法,因为它最灵活。

始终尽量保持简单。跨过 3 个 TimeZone 并使用代码解决这个问题只是为了让时间戳保持人类可读性太容易出错且耗时。

另一种方法是将其存储为字符串,但请不要这样做。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-23
    • 2013-09-16
    • 2018-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 2021-02-18
    相关资源
    最近更新 更多