Obtenir la date actuelle au format java.sql.Date

Je dois append la date actuelle dans une instruction préparée d’un appel JDBC. Je dois append la date dans un format comme yyyy/MM/dd .

J’ai essayé avec

 DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd"); Date date = new Date(); pstm.setDate(6, (java.sql.Date) date); 

mais j’ai cette erreur:

 threw exception java.lang.ClassCastException: java.util.Date cannot be cast to java.sql.Date 

Est-il possible d’obtenir un object java.sql.Date avec le même format?

Un java.sql.Date java.util.Date n’est pas un java.sql.Date . C’est l’inverse. Un java.sql.Date est un java.sql.Date java.util.Date .

Vous devrez le convertir en un java.sql.Date en utilisant le constructeur qui prend long fournir à java.util.Date .

 java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime()); 

Simplement en une seule ligne:

 java.sql.Date date = new java.sql.Date(Calendar.getInstance().getTime().getTime()); 
 new java.sql.Date(Calendar.getInstance().getTimeInMillis()); 

Celles-ci sont trop longues.

Utilisez simplement:

 new Date(System.currentTimeMillis()) 

tl; dr

 myPreparedStatement.setObject( // Directly exchange java.time objects with database without the troublesome old java.sql.* classes. … , LocalDate.parse( // Parse ssortingng as a `LocalDate` date-only value. "2018-01-23" // Input ssortingng that complies with standard ISO 8601 formatting. ) ) 

java.time

L’approche moderne utilise les classes java.time qui supplantent les anciennes classes héritées telles que java.util.Date et java.sql.Date .

Pour une valeur de date uniquement, utilisez LocalDate . La classe LocalDate représente une valeur de date uniquement sans heure et sans fuseau horaire.

Les classes java.time utilisent des formats standard lors de l’parsing / génération de chaînes. Donc, pas besoin de spécifier un modèle de formatage.

 LocalDate ld = LocalDate.parse( input ) ; 

Vous pouvez échanger directement des objects java.time avec votre firebase database à l’aide d’un pilote JDBC compatible avec JDBC 4.2 ou version ultérieure. Vous pouvez oublier de transformer les classes java.sql. *.

 myPreparedStatement.setObject( … , ld ) ; 

Récupération:

 LocalDate ld = myResultSet.getObject( … , LocalDate.class ) ; 

À propos de java.time

Le framework java.time est intégré à Java 8 et versions ultérieures. Ces classes supplantent les anciennes classes de date / heure héritées telles que java.util.Date , Calendar et SimpleDateFormat .

Le projet Joda-Time , maintenant en mode maintenance , conseille la migration vers les classes java.time .

Pour en savoir plus, consultez le didacticiel Oracle . Et recherchez Stack Overflow pour de nombreux exemples et explications. La spécification est JSR 310 .

Où obtenir les classes java.time?

  • Java SE 8 , Java SE 9 et versions ultérieures
    • Intégré
    • Partie de l’API Java standard avec une implémentation intégrée.
    • Java 9 ajoute quelques fonctionnalités et corrections mineures.
  • Java SE 6 et Java SE 7
    • Une grande partie de la fonctionnalité java.time est transférée vers Java 6 et 7 dans ThreeTen-Backport .
  • Android
    • Versions ultérieures des implémentations de bundles Android des classes java.time.
    • Pour Android antérieur, le projet ThreeTenABP adapte ThreeTen-Backport (mentionné ci-dessus). Voir Comment utiliser ThreeTenABP… .

Le projet ThreeTen-Extra étend java.time avec des classes supplémentaires. Ce projet est un terrain d’essai pour d’éventuels ajouts futurs à java.time. Vous pouvez y trouver des classes utiles telles que Interval , YearWeek , YearQuarter , etc.

Vous pouvez atteindre votre objective avec les moyens suivants: –

 long millis=System.currentTimeMillis(); java.sql.Date date=new java.sql.Date(millis); 

ou

 // create a java calendar instance Calendar calendar = Calendar.getInstance(); // get a java date (java.util.Date) from the Calendar instance. // this java date will represent the current date, or "now". java.util.Date currentDate = calendar.getTime(); // now, create a java.sql.Date from the java.util.Date java.sql.Date date = new java.sql.Date(currentDate.getTime()); 

tout ce que vous avez à faire est ce

  Calendar currenttime = Calendar.getInstance(); //creates the Calendar object of the current time Date sqldate = new Date((currenttime.getTime()).getTime()); //creates the sql Date of the above created object pstm.setDate(6, (java.sql.Date) date); //assign it to the prepared statement (pstm in this case) 

Va faire: new Date(Instant.now().toEpochMilli())