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?
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);
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
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()));
myPreparedStatement.setObject(
… ,
myXGC.toGregorianCalendar()
.toZonedDateTime()
) ;
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() ) ) ;
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;
}
Ceci retourne Java.util.Date:
Java.util.Date tempDate = issueDate.toGregorianCalendar().getTime();
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
Utilisez la classe DateFormat en Java. Cela devrait aider: http://docs.Oracle.com/javase/6/docs/api/Java/text/DateFormat.html