java date oracle11g

java - convertir XMLGregorianCalendar a la fecha, es decir, “MM/DD/YYYY hh: mm: ss AM”



date oracle11g (8)

Tengo una fecha en formato XMLGregorianCalendar como "2013-05-16T09: 54: 13" que tengo que convertir en la marca de tiempo "MM / DD / YYYY hh: mm: ss AM" para insertarla en la tabla de la base de datos Oracle utilizando Java.

¿Cómo puedo hacer esto en java?

Gracias por adelantado ...


tl; dr

myPreparedStatement.setObject( … , myXGC.toGregorianCalendar() .toZonedDateTime() ) ;

java.time

El enfoque moderno utiliza las clases java.time que suplantaron a las clases antiguas problemáticas Date , Calendar y GregorianCalendar .

Convertir de las clases heredadas a java.time.

GregorianCalendar gc = myXGC.toGregorianCalendar() ; ZonedDateTime zdt = gc.toZonedDateTime();

Pase valores de fecha y hora a su base de datos como objetos de fecha y hora en lugar de cadenas .

Si su controlador JDBC cumple con JDBC 4.2 y posteriores, puede tratar directamente con los tipos java.time.

myPreparedStatement.setObject( … , zdt ) ;

Si su controlador aún no es compatible, conviértalo brevemente a un tipo java.sql.

myPreparedStatement.setTimestamp( … , java.sql.Timestamp.from ( zdt.toInstant() ) ) ;


Aquí está la respuesta más clara:

Obtener instancia de Fecha de la instancia de XMLGregorianCalendar:

Date date = xmlCalendar.toGregorianCalendar().getTime();

Encontré ese código de Convert XMLGregorianCalendar to Date en Java

Formatea esa instancia de Date con el formato "MM / dd / aaaa hh: mm: ss a", obtendrás MM / DD / YYYY hh: mm: ss formato de AM

DateFormat formatter = new SimpleDateFormat("MM/dd/yyyy hh:mm:ss a"); String formattedDate = formatter.format(date)

De convertir fecha a cadena en Java

Para insertar la base de datos harías lo que Daniel sugirió.


Esto devuelve java.util.Date:

java.util.Date tempDate = issueDate.toGregorianCalendar().getTime();


Puede convertir XMLGregorianCalendar a java.util.Date Object utilizando estas dos líneas de código:

Date date = xmlDate.toGregorianCalendar().getTime(); System.out.println("java.util.date :- " + date);

Para convertir a java.slq.Date Object use este código: -

long time = xmlDate.toGregorianCalendar().getTime().getTime(); java.sql.Date sqlDate = new java.sql.Date(time);

Puedes ver el ejemplo completo here


Si desea insertar su fecha en una base de datos, primero haría lo que Daniel sugirió:

XMLGregorianCalendar xgc=<assume this is initialized>; Date timestamp=xgc.toGregorianCalendar().getTime();

y luego insértelo a través de PreparedStatement como marca de tiempo en milisegundos (tiempo de Época). De esa manera no perderás precisión.

preparedStatement.setTimestamp(colNum,new Timestamp(timestamp.getTime()));



Utilice la siguiente función: simplemente pase la instancia de XMLGregorianCalendar y el formato de fecha que desee (ejemplo de formato: "DD MMMM yyyy" -> 01 de enero de 2017)

public String parseDate(String format,XMLGregorianCalendar XMLdate){ Date date = XMLdate.toGregorianCalendar().getTime(); DateFormat formatter = new SimpleDateFormat(format); String formattedDate = formatter.format(date); return formattedDate; }


Puedes hacer esto para devolver una Date :

calendar.toGregorianCalendar().getTime()

Encontré ese código de este tutorial . Desde allí, puede usar un SimpleDateFormat para convertirlo en una cadena en el formato que desee.

Pero, si está utilizando JDBC para guardar la fecha en la base de datos, probablemente pueda pasar la Date directamente con este método :

preparedStatement.setDate(colNum, myDate);