将 java.sql.timestamp 转换为毫秒格式

Converting java.sql.timestamp to millisecond format

我在某些模型 (POJO) 中有一个私有 java.sql.Timestamp myDate class 如下所示

private String isActive;
private Date dob;
private Timestamp createdDate;
private Timestamp lastMktPrefUpdateAt;

我们使用的 spring 启动版本为 1.5。10.RELEASE 和 REST API 时间戳字段的响应采用毫秒格式,如下所示 -

   {
        "isActive": "y",
        "lastMktPrefUpdateAt": 1632195609787,
        "dob": "08/12/1991",
        "createdDate": 1632195609788
    }

我们最近将 spring 引导版本升级到 2.3。0.RELEASE 并且这开始发送时间戳字段以响应下面的某些 ISO 格式 -

  {
        "isActive": "y",
        "lastMktPrefUpdateAt": "2021-09-20T22:10:09.787+0000",
        "dob": "07/12/1991",
        "createdDate": "2021-09-20T22:10:09.788+0000"
    }

请问有哪位帮忙解答一下,如何将Timestamp格式化回毫秒格式? 我们需要在全局级别格式化时间戳,这意味着不更改所有 POJO classes.

您可以将该字符串转换为具有 .toInstant().toEpochMilli() 方法的 ZonedDateTime 对象。

类似于: long millis = ZonedDateTime.of(LocalDateTime.parse(str), ZoneId.of("Etc/UTC")).toInstant().toEpochMilli();

参见:

How to get milliseconds from LocalDateTime in Java 8

https://docs.oracle.com/javase/8/docs/api/java/time/LocalDateTime.html

https://docs.oracle.com/javase/8/docs/api/java/time/ZonedDateTime.html

但是,我建议重构系统以在以后使用不可变的 LocalDatTime 对象。

(您可以在该时间戳字段上放置一个适当的注释以以特定方式解析它,但我知道不是这样。)

在您的 properties 文件中试试这个

spring.jackson.serialization.write-dates-as-timestamps:true


在您想要的 属性 上方使用 @JsonFormat(shape = JsonFormat.Shape.NUMBER)

更新

如果要将毫秒添加到时间戳中,请尝试将 long 值传递给时间戳构造函数并调用 getTime() 方法以接收 13 位时间戳。

   long now = System.currentTimeMillis();
   Timestamp timeStamp= new Timestamp(now);
   System.out.println(timeStamp.getTime());