java 解组 LocalDateTime

java unmarshall LocalDateTime

这是我的适配器class:

public class LocalDateTimeAdapter extends XmlAdapter<String, LocalDateTime> {

    @Override
    public LocalDateTime unmarshal(String v) throws Exception {
        return new LocalDateTime(v);
    }

    @Override
    public String marshal(LocalDateTime v) throws Exception {
        return v.toString();
    }

}

这是一个对象-class,我想在其中存储日期:

    @XmlAccessorType(XmlAccessType.FIELD)
    public class Object {

    @XmlJavaTypeAdapter(LocalDateTimeAdapter.class)
    private LocalDateTime time;

    public LocalDateTime getTime() {
            return time;
    }

由于某种原因,我无法编译它。说明问题出在return new LocalDateTime(v);。这是我得到的错误:

Error:(9, 16) java: constructor LocalDateTime in class java.time.LocalDateTime cannot be applied to given types;
      required: java.time.LocalDate,java.time.LocalTime
      found: java.lang.String
      reason: actual and formal argument lists differ in length

和xml部分:

<time type="dateTime">2000-01-01T19:45:00Z</time>

我正在学习 this 示例。

可能您正在使用 Java 8 中的 LocalDateTime。此 class 没有任何字符串构造函数。

在您所关注的示例中 LocalDateTime is from JodaTime

因此,您可以通过以下方式做到这一点:

  • 导入org.joda.time.LocalDateTime(你将需要 JodaTime 依赖项)而不是 java.time.LocalDateTime;

  • 或将 unmarshal 方法更改为如下内容:

    @Override
    public LocalDateTime unmarshal(String v) throws Exception {
        return LocalDateTime.parse(v);
    }
    

您可能需要通知 date time format,因为默认格式为 2011-12-03T10:15:30,可能是这样:

@Override
public LocalDateTime unmarshal(String v) throws Exception {
    return LocalDateTime.parse(v, DateTimeFormatter.ISO_INSTANT);
}

此外,在 java.time.LocalDateTime toString 中将输出以下 ISO-8601 格式之一:

  • uuuu-MM-dd'T'HH:mm
  • uuuu-MM-dd'T'HH:mm:ss
  • uuuu-MM-dd'T'HH:mm:ss.SSS
  • uuuu-MM-dd'T'HH:mm:ss.SSSSSS
  • uuuu-MM-dd'T'HH:mm:ss.SSSSSSSSS