it-swarm.com.de

Rufen Sie das aktuelle Datum im Java.sql.Date-Format ab

Ich muss das aktuelle Datum in eine vorbereitete Anweisung eines JDBC-Aufrufs einfügen. Ich muss das Datum in einem Format wie yyyy/MM/dd hinzufügen.

Ich habe es mit versucht

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

aber ich habe diesen fehler:

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

Gibt es eine Möglichkeit, ein Java.sql.Date-Objekt mit demselben Format zu erhalten?

42
giozh

Ein Java.util.Date ist kein Java.sql.Date. Es ist anders herum. Ein Java.sql.Date ist ein Java.util.Date.

Sie müssen es in einen Java.sql.Date konvertieren, indem Sie den Konstruktor verwenden, der eine long nimmt, die ein Java.util.Date liefern kann.

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

Einfach in einer Zeile: 

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

Das ist alles zu lang.

Benutz einfach:

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

Wird tun: new Date(Instant.now().toEpochMilli())

2

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

Der moderne Ansatz verwendet die Klassen Java.time, die die lästigen alten Legacy-Klassen wie Java.util.Date Und Java.sql.Date Ersetzen.

Verwenden Sie LocalDate für einen Wert nur für Datum. Die Klasse LocalDate repräsentiert einen Datumswert ohne Uhrzeit und ohne Zeitzone.

Die Java.time-Klassen verwenden beim Parsen/Generieren von Zeichenfolgen Standardformate. Es muss also kein Formatierungsmuster angegeben werden.

LocalDate ld = LocalDate.parse( input ) ;

Sie können Java.time Objekte direkt mit Ihrer Datenbank austauschen, indem Sie einen JDBC-Treiber verwenden, der JDBC 4.2 oder neuer entspricht. Sie können die Umwandlung in und aus Java.sql. * -Klassen vergessen.

myPreparedStatement.setObject( … , ld ) ;

Abfrage:

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

About Java.time

Das Java.time Framework ist in Java 8 und höher. Diese Klassen ersetzen das lästige alte Legacy Datum-Zeit-Klassen wie Java.util.Date , Calendar , & SimpleDateFormat .

Das Joda-Time -Projekt, das sich jetzt im Wartungsmodus befindet, rät zur Migration in die Java.time -Klassen.

Weitere Informationen finden Sie im Oracle Tutorial . Durchsuchen Sie Stack Overflow nach vielen Beispielen und Erklärungen. Spezifikation ist JSR 31 .

Woher bekommen Sie die Java.time-Klassen?

Das Projekt ThreeTen-Extra erweitert Java.time um zusätzliche Klassen. Dieses Projekt ist ein Testfeld für mögliche zukünftige Ergänzungen von Java.time. Hier finden Sie möglicherweise einige nützliche Klassen wie Interval , YearWeek , YearQuarter und mehr .

1
Basil Bourque

alles was Sie tun müssen, ist dies

    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

Sie können Ihr Ziel auf folgende Weise erreichen: -

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

oder

// 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