Notícias
recent

Converter java.util.Date para XMLGregorianCalendar no formato yyyy-MM-dd. E vice-versa.



Quem usa JAXB e Axis2 para gerar arquivos XML, sabe que a geração de uma tag data é do tipo javax.xml.datatype.XMLGregorianCalendar e no caso de quem desenvolve usando um java.util.Date precisará converter.


Este exemplo converte em um XMLGregorianCalendar no formato yyyy-MM-dd, mas nada impede de você personalizar a classe e escolher o seu formato, tanto para o XMLGregorianCaledar com o java.date.Util.



Então segue um exemplo para conversão:

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.GregorianCalendar;
import javax.xml.datatype.XMLGregorianCalendar;
import com.sun.org.apache.xerces.internal.jaxp.datatype.XMLGregorianCalendarImpl;
import util.XMLGregorianCalendarConversionUtil;

public class TesteDataXML {

 /**
  * @ LyOn
  */
 public static void main(String[] args) {
  Date dataJU = new Date();// Cria um date com a data atual
  System.out.println("Data atual (Java Util) sem formatação: " + dataJU);
  
  GregorianCalendar gc = new GregorianCalendar();
  XMLGregorianCalendar dataXmlGC = new XMLGregorianCalendarImpl(gc);
  System.out.println("Data atual (XML Gregorian Caledar) sem formatação: "
 + dataXmlGC);
  
  System.out.println("Conversão de XML Gregorian Caledar em Java Util: " 
+ new SimpleDateFormat("dd/MM/yyyy").format(
XMLGregorianCalendarConversionUtil.asDate(dataXmlGC)));
  
  System.out.println("Conversão de Java Util em XML Gregorian Calendar: "
+ XMLGregorianCalendarConversionUtil.asXMLGregorianCalendar(dataJU));
 }

}

Classe XMLGregorianCalendarConversionUtil:

import java.util.Calendar;
import java.util.GregorianCalendar;
import javax.xml.datatype.DatatypeConfigurationException;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;

/**
 * Classe para converção entre datas do tipo java.util.Date e
 * XMLGregorianCalendar
 */
public class XMLGregorianCalendarConversionUtil {

 /* DatatypeFactory cria novos objetos que javax.xml.datatype mapa XML
         * para objetos Java. */
 private static DatatypeFactory df = null;

 static {
  try {
   df = DatatypeFactory.newInstance();
  } catch(DatatypeConfigurationException e) {
   String msg = "Erro ao tentar obter uma nova instância de DatatypeFactory";
   throw new IllegalStateException(msg, e);
  }
 }

 /* Converte um java.util.Date em uma instância de XMLGregorianCalendar
         * no formato yyyy-MM-dd, sem os milisegundos
         */
 public static XMLGregorianCalendar asXMLGregorianCalendar(java.util.Date date) {
  if(date == null) {
   return null;
  } else {
   GregorianCalendar calendar = new GregorianCalendar();
   calendar.setTime(date);

   XMLGregorianCalendar xmlGregorianCalendar = df.newXMLGregorianCalendar();
   xmlGregorianCalendar.setDay(calendar.get(Calendar.DAY_OF_MONTH));
   xmlGregorianCalendar.setMonth(calendar.get(Calendar.MONTH));
   xmlGregorianCalendar.setYear(calendar.get(Calendar.YEAR));

   return xmlGregorianCalendar;
  }
 }

 // Converte um XMLGregorianCalendar para uma instância de java.util.Date
 public static java.util.Date asDate(XMLGregorianCalendar xmlGC) {
  if(xmlGC == null) {
   return null;
  } else {
   return xmlGC.toGregorianCalendar().getTime();
  }
 }

}

É isso ai, fica a dica para meus colegar programadores ;)
Qualquer dúvida deixe um recado.

Até a próxima.
Laisson R. Silveira

Laisson R. Silveira

Louco por inovações e desenvolvimento de softwares, apaixonado por música e praia. Analista Desenvolvedor Java e Consultor de Sistemas.

Nenhum comentário :

Postar um comentário

Formulário de contato

Nome

E-mail *

Mensagem *

Tecnologia do Blogger.