web-dev-qa-db-fra.com

Obtenir la date actuelle au format Java.sql.Date

Je dois ajouter la date actuelle dans une déclaration préparée d'un appel JDBC. Je dois ajouter la date dans un format tel que 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

Existe-t-il un moyen d’obtenir un objet Java.sql.Date avec le même format?

42
giozh

Un Java.util.Date n'est pas un Java.sql.Date. C'est l'inverse. Un Java.sql.Date est un Java.util.Date.

Vous devrez le convertir en Java.sql.Date en utilisant le constructeur qui prend une long qu'un Java.util.Date peut fournir.

Java.sql.Date sqlDate = new Java.sql.Date(utilDate.getTime());
70
rgettman

Simplement en une ligne: 

Java.sql.Date date = new Java.sql.Date(Calendar.getInstance().getTime().getTime());
29
kelevra88
new Java.sql.Date(Calendar.getInstance().getTimeInMillis());
14
Amala

Ce sont tous trop long.

Il suffit d'utiliser:

new Date(System.currentTimeMillis())
9
Ethan Conner

tl; dr

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

Java.time

L'approche moderne utilise les classes Java.time qui supplantent les anciennes classes problématiques, 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 pour analyser/générer des chaînes. Donc, pas besoin de spécifier un modèle de formatage.

LocalDate ld = LocalDate.parse( input ) ;

Vous pouvez échanger directement des objets Java.time avec votre base de données à l'aide d'un pilote JDBC conforme à JDBC 4.2 ou ultérieur. Vous pouvez oublier de transformer des classes Java.sql. *.

myPreparedStatement.setObject( … , ld ) ;

Récupération:

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

À propos de Java.time

Le cadre Java.time est intégré à Java 8 et versions ultérieures. Ces classes supplantent les anciennes classes gênantes héritées _ date-heure telles que Java.util.Date , Calendar _, & SimpleDateFormat .

Le projet Joda-Time , désormais en mode { mode maintenance }, conseille la migration vers les classes Java.time .

Pour en savoir plus, consultez le Oracle Tutorial . 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é. 
    • Une partie de l'API Java standard avec une implémentation fournie.
    • 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 rétroportée vers Java 6 et 7 dans ThreeTen-Backport .
  • Android
    • Les versions ultérieures d'Android regroupent des implémentations des classes Java.time.
    • Pour les versions antérieures d'Android, le projet ThreeTenABP s'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 à Java.time. Vous pouvez y trouver des classes utiles telles que Interval _, YearWeek , YearQuarter _ et plus _.

1
Basil Bourque

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

1
Andrey Lebedenko

tout ce que vous avez à faire est ceci

    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)
0
muhammed aslam

Vous pouvez atteindre votre objectif 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());
0
duggu