Obtenir la date actuelle en java.SQL.Format de la Date

j'ai besoin d'ajouter la date actuelle dans une déclaration préparée d'un appel JDBC. Je dois ajouter la date dans un format comme yyyy/MM/dd .

j'ai essayer 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

y a-t-il un moyen d'obtenir un objet java.sql.Date avec le même format?

40
demandé sur Marc-Andre 2013-08-15 20:57:03

8 réponses

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 aurez besoin de le convertir en un java.sql.Date en utilisant le constructeur qui prend un long qu'un java.util.Date peut fournir.

java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime());
67
répondu rgettman 2013-08-15 17:04:54

simplement sur une ligne:

java.sql.Date date = new java.sql.Date(Calendar.getInstance().getTime().getTime());
28
répondu kelevra88 2015-08-14 20:53:21
new java.sql.Date(Calendar.getInstance().getTimeInMillis());
14
répondu Amala 2016-02-24 21:44:30

ceux-ci sont trop longs.

il suffit d'utiliser:

new Date(System.currentTimeMillis())
7
répondu Ethan Conner 2018-06-27 16:07:41

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.
    ) 
)

de java.time

La méthode moderne utilise la de java.les classes de temps qui supplantent les anciennes classes d'héritage difficiles telles que java.util.Date et java.sql.Date .

pour une valeur date seulement, utilisez LocalDate . La classe LocalDate représente une date sans Heure de la journée et sans fuseau horaire.

le Java.les classes de temps utilisent des formats standards pour analyser / générer des chaînes. Donc pas besoin de spécifier le format.

LocalDate ld = LocalDate.parse( input ) ;

vous pouvez directement échanger java.time objets avec votre base de données en utilisant un pilote JDBC conforme à JDBC 4.2 ou plus tard. Vous pouvez oublier la transformation et de java.SQL.* classe.

myPreparedStatement.setObject( … , ld ) ;

Récupération:

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

à Propos de de java.heure

Le de java.time framework est construit dans Java 8 et plus tard. Ces classes remplacent les anciennes héritées classes de date-heure telles que java.util.Date , Calendar , & SimpleDateFormat .

le projet "Joda-Time , maintenant en mode maintenance , conseille la migration vers le java.temps des classes.

pour en savoir plus, voir le Oracle Tutorial . Et rechercher le débordement de la pile pour de nombreux exemples et explications. La spécification est JSR 310 .

où obtenir le java.les classes de temps?

The ThreeTen-Extra le projet s'étend java.temps avec des cours supplémentaires. Ce projet est un terrain d'expérimentation pour d'éventuelles futures additions à java.temps. Vous pouvez trouver ici quelques cours utiles tels que: Interval , YearWeek , YearQuarter , et plus .

1
répondu Basil Bourque 2018-03-12 16:02:30

vous pouvez atteindre votre objectif avec les moyens ci-dessous: -

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
répondu duggu 2018-02-09 11:02:21

tout ce que vous avez à faire est de cette

    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
répondu muhammed aslam 2018-03-12 07:56:09

fera: new Date(Instant.now().toEpochMilli())

0
répondu Andrey Lebedenko 2018-04-08 23:50:05