90 votes

Comment spécifier le format de date utilisé lors de JAXB commissaires xsd:dateTime?

Lorsque JAXB maréchaux d'un objet date (XMLGregorianCalendar) dans un xsd:dateTime élément comment pouvez-vous spécifier le format du document XML obtenu?

Par exemple: La valeur par défaut format de données est utilise millisecondes 2012-08-21T13:21:58.000 Z J'ai besoin d'omettre les millisecondes. 2012-08-21T13:21:58Z

Comment puis-je spécifier le format de sortie/format de date que je veux qu'il à utiliser? Je suis en utilisant javax.xml.type de données.DatatypeFactory pour créer le XMLGregorianCalendar objet. XMLGregorianCalendar xmlCal = datatypeFactory.newXMLGregorianCalendar(cal);

134voto

Blaise Doughan Points 75613

Vous pouvez utiliser un XmlAdapter de personnaliser la façon dont un type de date est écrite au format XML.

import java.text.SimpleDateFormat;
import java.util.Date;

import javax.xml.bind.annotation.adapters.XmlAdapter;

public class DateAdapter extends XmlAdapter<String, Date> {

    private SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    @Override
    public String marshal(Date v) throws Exception {
        return dateFormat.format(v);
    }

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

}

Ensuite, vous utilisez l' @XmlJavaTypeAdapter d'annotation pour spécifier que l' XmlAdapter doit être utilisé pour un champ spécifique de la propriété.

@XmlElement(name = "timestamp", required = true) 
@XmlJavaTypeAdapter(DateAdapter.class)
protected Date timestamp; 

19voto

Andrea Luciano Points 91

J'utilise un SimpleDateFormat pour créer le XMLGregorianCalendar, comme dans cet exemple:

public static XMLGregorianCalendar getXmlDate(Date date) throws DatatypeConfigurationException {
    return DatatypeFactory.newInstance().newXMLGregorianCalendar(new SimpleDateFormat("yyyy-MM-dd").format(date));
}

public static XMLGregorianCalendar getXmlDateTime(Date date) throws DatatypeConfigurationException {
    return DatatypeFactory.newInstance().newXMLGregorianCalendar(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss").format(date));
}

La première méthode crée une instance de XMLGregorianCalendar qui est formaté en XML marshaller comme valide xsd:date, la deuxième méthode est valide xsd:dateTime.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X