Java 将Json解析为分区日期时间
我收到以下json时间格式Java 将Json解析为分区日期时间,java,jackson,Java,Jackson,我收到以下json时间格式 "TimeEnd": "2017-05-24 09:52:51+02:00" 我的dto如下: @JsonProperty("TimeEnd") @JsonDeserialize(using = JsonZonedDateTimeDeserializer.class) private ZonedDateTime timeEnd; 我编写了以下反序列化程序 public class JsonZonedDateTimeDeserializer ext
"TimeEnd": "2017-05-24 09:52:51+02:00"
我的dto如下:
@JsonProperty("TimeEnd")
@JsonDeserialize(using = JsonZonedDateTimeDeserializer.class)
private ZonedDateTime timeEnd;
我编写了以下反序列化程序
public class JsonZonedDateTimeDeserializer extends JsonDeserializer<ZonedDateTime> {
@Override
public ZonedDateTime deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException {
return ZonedDateTime.parse(jp.getText());
}
}
公共类JsonZonedDateTimeDeserializer扩展JsonDeserializer{
@凌驾
公共分区DateTime反序列化(JsonParser jp,反序列化上下文ctxt)引发IOException{
返回ZonedDateTime.parse(jp.getText());
}
}
但是我得到了:
无法在索引10处分析文本“2017-05-24 09:52:51+02:00”
我尝试了多种解决方案,但似乎都不起作用…您不应该试图将其解析为
ZoneDateTime
,因为它实际上没有时区-它有UTC偏移量OffsetDateTime
在这里更合适。区分这两种类型是值得的-您可以创建一个带有固定UTC偏移的时区的ZoneDateTime
,但您应该了解,这与“常规”时区不同。如果只在一个瞬间有偏移量,OffsetDateTime
更好
现在,由于您的输入值没有标准模式所需的“t”,因此您需要使用自定义模式,但这非常简单:
import java.time.*;
import java.time.format.*;
import java.util.*;
public class Test {
public static void main(String[] args) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(
"yyyy-MM-dd HH:mm:ssXXXXX", Locale.ROOT);
String text = "2017-05-24 09:52:51+02:00";
OffsetDateTime odt = OffsetDateTime.parse(text, formatter);
System.out.println(odt);
}
}
您不应该试图将其解析为
zoneDateTime
,因为它实际上没有时区-它有UTC偏移量OffsetDateTime
在这里更合适。区分这两种类型是值得的-您可以创建一个带有固定UTC偏移的时区的ZoneDateTime
,但您应该了解,这与“常规”时区不同。如果只在一个瞬间有偏移量,OffsetDateTime
更好
现在,由于您的输入值没有标准模式所需的“t”,因此您需要使用自定义模式,但这非常简单:
import java.time.*;
import java.time.format.*;
import java.util.*;
public class Test {
public static void main(String[] args) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(
"yyyy-MM-dd HH:mm:ssXXXXX", Locale.ROOT);
String text = "2017-05-24 09:52:51+02:00";
OffsetDateTime odt = OffsetDateTime.parse(text, formatter);
System.out.println(odt);
}
}
您可以只使用:
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ssXXX");
return ZonedDateTime.parse(jp.getText(), dateTimeFormatter);
您可以只使用:
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ssXXX");
return ZonedDateTime.parse(jp.getText(), dateTimeFormatter);
@filemonczyk:不太清楚你的意思,但我提供的代码在我的机器上运行,根据文档,X的数量是经过深思熟虑的:“五个字母输出时分和可选秒,带有冒号,如“+01:30:15”@filemonczyk:不太清楚你的意思,但我提供的代码在我的机器上运行,根据文档,X的数量是经过深思熟虑的:“五个字母输出小时和分钟,可选秒,带冒号,如“+01:30:15”