如何在 Spring Boot 应用程序中将 Date 从 2023-11-10 09:44:00.038860 转换为 2023-11-10T09:44:20.001+00:00

How to convert Date from 2023-11-10 09:44:00.038860 to 2023-11-10T09:44:20.001+00:00 in spring boot application

提问人:Keerthana Hemachandran 提问时间:11/10/2023 更新时间:11/10/2023 访问量:93

问:

我正在从 ELK 获取响应并使用 ObjectMapper 将其映射到对象,然后将响应作为 JSON 返回。ELK 响应具有 Date 数据类型字段,格式为 yyyy-MM-dd HH:mm:ss。SSSSSS中。检索到的 ELK 响应采用 UTC 格式,我希望 API JSON 响应也采用 UTC 格式。因此,无需时区转换。 我希望 JSON 有效负载以 2023-11-09T03:00:35.563+00:00 格式显示日期字段。它试图在场上设置@JsonFormat但没有奏效。

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSSSS")
private Date timestamp;

我尝试使用多种格式 yyyy-MM-dd'T'HH:mm:ss。SSSX 或 yyyy-MM-dd'T'HH:mm:ss。SSS'Z'。但抛出相同的异常。

还尝试了以下方法,

  • 设置映射器的日期格式。
SimpleDateFormat out = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSSSS");
mapper.setDateFormat(out);
  • 使用简单的日期格式进行转换。
SimpleDateFormat in = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSSS");
SimpleDateFormat out = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSSSS");
String dateIn = in.format(Obj.getTimestamp());
Date dateOut = out.parse(dateIn);

我是否使用了 2023-11-09T03:00:35.563+00:00 的正确格式? 引发的异常是引发的异常 [无法从字符串“2023-11-10 09:44:00.038860”反序列化 java.util.Date 类型的值:预期格式“yyyy-MM-dd'T'HH:mm:ss。SSSSSS“或不可解析的日期异常。 谢谢!

java spring-boot simpledateformat 日期转换

评论

4赞 MC Emperor 11/10/2023
不应使用 和 .他们制造麻烦。请改用包中的类。SimpleDateFormatDatejava.time
0赞 Basil Bourque 11/10/2023
为什么秒数会改变?

答:

0赞 AVI 11/10/2023 #1
import com.fasterxml.jackson.annotation.JsonFormat;
import java.util.Date;

public class YourResponseObject {
    private Date yourDateField;

    // Getter method for the Date field
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss.SSSSSS")
    public Date getYourDateField() {
        return yourDateField;
    }

    public void setYourDateField(Date yourDateField) {
        this.yourDateField = yourDateField;
    }
}
1赞 Basil Bourque 11/10/2023 #2

字符串操作

在您的例子中,最简单的方法是单纯的字符串操作。

String input = "2023-11-10 09:44:00.038860" ;
String result = 
    input
    .replace( " " , "T" )
    .substring( 0 , 24 )
    .concat( "+00:00" )
;

评论

0赞 mattsmith5 11/11/2023
很好的回答,我刚刚发布了另一个问题,谢谢