web-dev-qa-db-fra.com

convertir XMLGregorianCalendar to date i.e "MM/JJ/AAAA hh: mm: ss AM"

J'ai une date au format XMLGregorianCalendar du type "2013-05-16T09: 54: 13" que je dois convertir en horodatage "MM/JJ/AAAA hh: mm: ss AM" pour insertion dans la table de base de données Oracle à l'aide de Java.

comment puis-je faire cela en Java?

23
Suniel

Vous pouvez le faire pour renvoyer une Date:

calendar.toGregorianCalendar().getTime()

J'ai trouvé ce code de this tutorial . À partir de là, vous pouvez utiliser un SimpleDateFormat pour le transformer en chaîne au format souhaité. 

Toutefois, si vous utilisez JDBC pour enregistrer la date dans la base de données, vous pouvez probablement transmettre directement la variable Date avec la méthode this :

preparedStatement.setDate(colNum, myDate);
42
Daniel Kaplan

Voici une réponse plus claire:

Obtenir une instance de Date à partir d'une instance XMLGregorianCalendar:

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

J'ai trouvé ce code de Convert XMLGregorianCalendar to Date in Java

Formatez cette instance de Date au format "MM/JJ/AAAA hh: mm: ss a", vous obtiendrez MM/JJ/AAAA hh: mm: ss Format AM 

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

De Convertir la date en chaîne en Java

Pour insérer la base de données, vous feriez ce que Daniel suggéra

6
David Pham

Si vous voulez insérer votre date dans une base de données, je voudrais d'abord faire ce que Daniel a suggéré:

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

et ensuite, insérez-le dans un PreparedStatement en tant qu'horodatage en millisecondes (heure de l'époque). De cette façon, vous ne perdrez pas la précision.

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

tl; dr

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

Java.time

L’approche moderne utilise les classes Java.time qui ont supplanté les anciennes classes problématiques Date, Calendar et GregorianCalendar.

Convertissez les classes héritées en Java.time. 

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

Transmettez les valeurs date-heure à votre base de données en tant qu'objets date-heure plutôt qu'en tant que chaînes .

Si votre pilote JDBC est conforme à JDBC 4.2 et versions ultérieures, vous pouvez traiter directement avec les types Java.time. 

myPreparedStatement.setObject( … , zdt ) ;

Si votre pilote n'est pas encore compatible, convertissez-le brièvement en un type Java.sql.

myPreparedStatement.setTimestamp( … , Java.sql.Timestamp.from ( zdt.toInstant() ) ) ;
1
Basil Bourque

Veuillez utiliser la fonction ci-dessous - transmettez simplement l'instance XMLGregorianCalendar et le format de date souhaités (exemple de format: "JJ MMMM aaaa" -> 01 janvier 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;
}
0
Arundev

Ceci retourne Java.util.Date:

Java.util.Date tempDate = issueDate.toGregorianCalendar().getTime();
0
Noman

Vous pouvez convertir XMLGregorianCalendar en objet Java.util.Date à l’aide de ces deux lignes de code: - 

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

Pour convertir un objet Java.slq.Date, utilisez ce code: - 

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

Vous pouvez voir un exemple complet ici

0
lalitbhagtani

Utilisez la classe DateFormat en Java. Cela devrait aider: http://docs.Oracle.com/javase/6/docs/api/Java/text/DateFormat.html

0
schilippe