Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

java unmarshall LocalDateTime

This is my adapter 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();
    }

}

and this is an object-class where I want to store the date:

    @XmlAccessorType(XmlAccessType.FIELD)
    public class Object {

    @XmlJavaTypeAdapter(LocalDateTimeAdapter.class)
    private LocalDateTime time;

    public LocalDateTime getTime() {
            return time;
    }

For some reason, I can't compile it. It shows that the problem is at return new LocalDateTime(v);. And this is the error I get:

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

and the xml part:

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

I'm following this example.

like image 452
itVico Avatar asked Oct 18 '25 14:10

itVico


1 Answers

Probably you're using LocalDateTime from Java 8. This class has not any constructor for string.

In the example which you're following LocalDateTime is from JodaTime.

So, you can do this in to ways:

  • Import org.joda.time.LocalDateTime (you will need JodaTime dependency) instead of java.time.LocalDateTime;

  • or change unmarshal method to something like this:

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

You may need to inform the date time format, as the default is a format to 2011-12-03T10:15:30, maybe this:

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

Also, in java.time.LocalDateTime toString will output one of the following ISO-8601 formats:

  • 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
like image 138
Bruno Ribeiro Avatar answered Oct 20 '25 03:10

Bruno Ribeiro



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!