¿No hay una forma conveniente de obtener de un java.util.Date a un XMLGregorianCalendar?java.util.Fecha a XMLGregorianCalendar
Respuesta
GregorianCalendar c = new GregorianCalendar();
c.setTime(yourDate);
XMLGregorianCalendar date2 = DatatypeFactory.newInstance().newXMLGregorianCalendar(c);
Aquí es un método para la conversión de un GregorianCalendar a XMLGregorianCalendar; Voy a dejar la parte de la conversión de un java.util.Date a GregorianCalendar como un ejercicio para usted:
import java.util.GregorianCalendar;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;
public class DateTest {
public static void main(final String[] args) throws Exception {
GregorianCalendar gcal = new GregorianCalendar();
XMLGregorianCalendar xgcal = DatatypeFactory.newInstance()
.newXMLGregorianCalendar(gcal);
System.out.println(xgcal);
}
}
EDIT: Slooow :-)
Esta es una solución para convertir GregorianCalendar a XMLGregorianCalendar y no lo que se indica en la pregunta – ftrujillo
espero que mi codificación aquí es correcto; D para hacerlo más rápido sólo tiene que utilizar la llamada fea getInstance() de GregorianCalendar en lugar de llamada al constructor:
import java.util.GregorianCalendar;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;
public class DateTest {
public static void main(final String[] args) throws Exception {
// do not forget the type cast :/
GregorianCalendar gcal = (GregorianCalendar) GregorianCalendar.getInstance();
XMLGregorianCalendar xgcal = DatatypeFactory.newInstance()
.newXMLGregorianCalendar(gcal);
System.out.println(xgcal);
}
}
-1 para usar .getInstance(). 'GregorianCalendar.getInstance()' es el equivalente de 'Calendar.getInstance()'. El 'Calendar.getInstance()' no puede hacerlo más rápido, porque usa el mismo 'nuevo GregorianCalendar()', pero antes también verifica la configuración regional predeterminada y puede crear un calendario japonés o budista, por lo que para algunos usuarios afortunados será 'ClassCastException'! – kan
para aquellos que podrían terminar aquí en busca de la conversión opuesta (de XMLGregorianCalendar
a Date
):
XMLGregorianCalendar xcal = <assume this is initialized>;
java.util.Date dt = xcal.toGregorianCalendar().getTime();
Acabo de pensar que agregaría mi solución a continuación, ya que las respuestas anteriores no satisfacían mis necesidades exactas. Mi esquema Xml requería elementos de fecha y hora separados, no un campo de fecha y hora único. El constructor estándar XMLGregorianCalendar utilizado anteriormente generará un campo DateTime
Tenga en cuenta que hay un par de gothca, como tener que agregar uno al mes (ya que java cuenta meses desde 0).
GregorianCalendar cal = new GregorianCalendar();
cal.setTime(yourDate);
XMLGregorianCalendar xmlDate = DatatypeFactory.newInstance().newXMLGregorianCalendarDate(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH)+1, cal.get(Calendar.DAY_OF_MONTH), 0);
XMLGregorianCalendar xmlTime = DatatypeFactory.newInstance().newXMLGregorianCalendarTime(cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE), cal.get(Calendar.SECOND), 0);
Suponiendo que está descodificación o codificación XML y el uso de JAXB
, entonces es posible reemplazar la fechaHora vinculante en su totalidad y utilizar algo más que `XMLGregorianCalendar' para cada fecha en el esquema.
De esta manera, puede hacer que JAXB
haga lo repetitivo mientras puede dedicar tiempo a escribir un código impresionante que ofrece valor.
Ejemplo para un JodaTime DateTime
: (. Hacer esto con java.util.Date también funcionaría - pero con ciertas limitaciones prefiero JodaTime y ha copiado de mi código, así que sé que funciona ...)
<jxb:globalBindings>
<jxb:javaType name="org.joda.time.LocalDateTime" xmlType="xs:dateTime"
parseMethod="test.util.JaxbConverter.parseDateTime"
printMethod="se.seb.bis.test.util.JaxbConverter.printDateTime" />
<jxb:javaType name="org.joda.time.LocalDate" xmlType="xs:date"
parseMethod="test.util.JaxbConverter.parseDate"
printMethod="test.util.JaxbConverter.printDate" />
<jxb:javaType name="org.joda.time.LocalTime" xmlType="xs:time"
parseMethod="test.util.JaxbConverter.parseTime"
printMethod="test.util.JaxbConverter.printTime" />
<jxb:serializable uid="2" />
</jxb:globalBindings>
y el convertidor:
public class JaxbConverter {
static final DateTimeFormatter dtf = ISODateTimeFormat.dateTimeNoMillis();
static final DateTimeFormatter df = ISODateTimeFormat.date();
static final DateTimeFormatter tf = ISODateTimeFormat.time();
public static LocalDateTime parseDateTime(String s) {
try {
if (StringUtils.trimToEmpty(s).isEmpty())
return null;
LocalDateTime r = dtf.parseLocalDateTime(s);
return r;
} catch (Exception e) {
throw new IllegalArgumentException(e);
}
}
public static String printDateTime(LocalDateTime d) {
try {
if (d == null)
return null;
return dtf.print(d);
} catch (Exception e) {
throw new IllegalArgumentException(e);
}
}
public static LocalDate parseDate(String s) {
try {
if (StringUtils.trimToEmpty(s).isEmpty())
return null;
return df.parseLocalDate(s);
} catch (Exception e) {
throw new IllegalArgumentException(e);
}
}
public static String printDate(LocalDate d) {
try {
if (d == null)
return null;
return df.print(d);
} catch (Exception e) {
throw new IllegalArgumentException(e);
}
}
public static String printTime(LocalTime d) {
try {
if (d == null)
return null;
return tf.print(d);
} catch (Exception e) {
throw new IllegalArgumentException(e);
}
}
public static LocalTime parseTime(String s) {
try {
if (StringUtils.trimToEmpty(s).isEmpty())
return null;
return df.parseLocalTime(s);
} catch (Exception e) {
throw new IllegalArgumentException(e);
}
}
Ver aquí: how replace XmlGregorianCalendar by Date?
Si está satisfecho con solo mapa a un instante basado en la zona horaria + marca de tiempo, y la zona horaria original no es realmente relevante, entonces java.util.Date
probablemente también esté bien.
Un ejemplo de una línea usando Joda-Time biblioteca:
XMLGregorianCalendar xgc = DatatypeFactory.newInstance().newXMLGregorianCalendar(new DateTime().toGregorianCalendar());
crédito a Nicolas Mommaerts de su comentario en the accepted answer.
Salida este código: -
/* Create Date Object */
Date date = new Date();
XMLGregorianCalendar xmlDate = null;
GregorianCalendar gc = new GregorianCalendar();
gc.setTime(date);
try{
xmlDate = DatatypeFactory.newInstance().newXMLGregorianCalendar(gc);
}
catch(Exception e){
e.printStackTrace();
}
System.out.println("XMLGregorianCalendar :- " + xmlDate);
Se puede ver ejemplo completo here
No creo que esta respuesta no proporcione nada nuevo. Quizás pueda editar la respuesta anterior en lugar de publicar otra casi igual. – winter
- 1. fecha Convertir a XMLGregorianCalendar
- 2. convertido XMLGregorianCalendar a java.sql.Timestamp
- 3. Cómo rellenar XMLGregorianCalendar()
- 4. Largo a XMLGregorianCalendar y de regreso a Long
- 5. cómo reemplazar XmlGregorianCalendar por fecha?
- 6. DatatypeConfigurationException al crear nueva XMLGregorianCalendar
- 7. Conversión simple entre java.util.Date y XMLGregorianCalendar
- 8. ¿Cómo restar dos objetos XmlGregorianCalendar para crear un objeto Duration?
- 9. El uso de DataTypeFactory al crear XMLGregorianCalendar golpea mal el rendimiento
- 10. Cómo personalizar la asignación de referencias de JAXB si se generan beans JAXB a partir de XML
- 11. Cómo decirle a Apache CXF que use java.util.Date en Spring Configuration
- 12. XMLGregorianCuenta de fecha de calendario
- 13. ¿Alguien puede pensar en un uso práctico para XMLGregorianCalendar.getEon()?
- 14. Fabricación (a, a) a Functor
- 15. La manera más fácil de convertir "a/b/c" a ["a/b/c", "a/b", "a"]
- 16. (a! = Null) o (null! = A)
- 17. Bidireccional A * (A-star) Buscar
- 18. Obligar a ConfigurationManager a volver a cargar todas las secciones
- 19. cómo forzar a google a volver a indexar una página
- 20. NUnit frente a MbUnit frente a MSTest frente a xUnit.net
- 21. Rangos A a B donde A> B en F #
- 22. conversión de int a int * a continuación, volver a int
- 23. ¿Cómo operar una función [a] -> [a] en [(a, Int)]?
- 24. Cómo forzar a Xcode a volver a vincular
- 25. ¿Cómo forzo a ActiveRecord a volver a cargar una clase?
- 26. La clase A no es igual a la clase A
- 27. Actualizar elemento a revisión frente a Revertir a la revisión
- 28. HAS-A, terminología IS-A en lenguaje orientado a objetos
- 29. Convierta A a 1 B a 2 ... Z a 26 y luego AA a 27 AB a 28 (índices de columna a referencias de columna en Excel)
- 30. ¿Cuáles son las posibles maneras de forzar a mathematica a mostrar -1 + a como a-1
personal ¿Se Podrán mantener la getInstance() como una variable estática en alguna clase de convertidor? Traté de buscarlo en el JavaDoc pero no pude encontrar nada. ¿Es un poco difícil saber si habrá problemas en el uso simultáneo? – Martin
Si está dispuesto a utilizar JodaTime, puede hacerlo en una línea: DatatypeFactory.newInstance(). NewXMLGregorianCalendar (new DateTime(). ToGregorianCalendar()) –
XMLGregorianCalendar date2 = DatatypeFactory.newInstance(). NewXMLGregorianCalendar (new GregorianCalendar (YYYY, MM, DD)); –