将 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());
我在某些模型 (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());