Java Spring Boot - 以字符串而不是嵌套形式获取日期和时间

Java Spring Boot - Get date and time as string instead of nested

提问人:adamkwn 提问时间:5/23/2023 最后编辑:LinFelixadamkwn 更新时间:5/25/2023 访问量:226

问:

我收到了一个Java Spring Boot应用程序,我只需要更改一件事。 在我处理的 json 数据中的其他数据中,我有以下内容:

"valueSetAt":{
   "dateTime":{
      "date":{
         "year":2023,
         "month":5,
         "day":2
      },
      "time":{
         "hour":13,
         "minute":1,
         "second":36,
         "nano":335000000
      }
   },
   "offset":{
      "totalSeconds":0
   },
   "zone":{
      "id":"UTC"
   }
}

我需要将这种形式的日期和时间转换为格式的日期时间

"startTime":
   "2023-03-31T13:00:00.000Z"

问题是,在转换之前我无法做任何事情,因为这种错误的格式来自我无法查看或更改任何内容的 API。来自 API 的开发人员表示,当他们将数据处理为 json 时发生了转换。 本质上,我认为我需要的是将上述日期和时间从 ZonedDateTime 转换为字符串?

java spring-boot datetime zoneddatetime

评论

0赞 Anonymous 5/23/2023
搜索 Jackson JavaTimeModule。
0赞 adamkwn 5/23/2023
是的,非常感谢你,我正在尝试这种方式。但是使用JavaTimeModule,如何将上述dateTime转换为字符串?
1赞 Bohemian 5/24/2023
是不是你有一些带有字段“valueSetAt”的json(一个字符串),你想用一个“startTime”字段替换它(每个字段都有你显示的数据)?

答:

0赞 Irremediable 5/23/2023 #1

看来你的问题已经有答案了。

目前尚不清楚你是这些值的使用者还是生产者,但在两者的情况下,你可以通过指定 getter 和 setter 来处理它,并在其上添加适当的注释:

public class DtoObject {
  private ZonedDateTime dateTimeField;

  // Used during serialization
  @JsonProperty("startTime")
  @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZ")
  public ZonedDateTime getStartTime() {
    return dateTimeField;
  }

  // Used during deserialization
  // eg. @JsonFormat(pattern = "yyyy-MM-dd") 
  public void setDateTimeField(ZonedDateTime dateTimeField) {
    this.dateTimeField = dateTimeField;
  }
}

评论

0赞 adamkwn 5/23/2023
我都不是。我正在使用 API 并接收这些数据。然后我正在处理它们并以不同的格式发送它们。我的问题是我无法将上面的json转换为日期时间字符串(正如我所提到的)。
0赞 Irremediable 5/23/2023
如果你正在使用 API,处理一些,然后发送,那么这意味着你正在使用其他人的 api 并生成你自己的 api。提供的链接和提供的代码中的解决方案应该可以帮助您