LocalDate date4 = ZonedDateTime
.parse(date, DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss zzz yyyy", Locale.ENGLISH))
.toLocalDate();
java.sql.Date date5 = java.sql.Date.valueOf(date4);
Ich verwende die modernen Klassen in der java.time
Paket. Sie werden feststellen, dass der Code nicht nur einfacher ist, sobald Sie sich mit dem flüssigen Schreibstil der neueren Klassen vertraut gemacht haben, ist er auch klarer.
Wenn Sie 100 % modern sein möchten, sollten Sie auch überprüfen, ob Ihr aktueller MySQL-JDBC-Treiber kein LocalDate
akzeptiert direkt ohne Umwandlung in java.sql.Date
. Es sollte.
Ein paar Details zu beachten
- Wenn Sie möchten, dass Ihr Code auf Computern ausgeführt wird, auf die Sie keinen Einfluss haben, geben Sie Ihrem Formatierer immer ein Gebietsschema an, oder Ihre Datumszeichenfolge kann auf einem Computer mit einem nicht englischsprachigen Gebietsschema nicht analysiert werden. Sie können
Locale.ROOT
verwenden für ein Gebietsschema neutrales Gebietsschema (es spricht Englisch). - Vermeiden Sie nach Möglichkeit die aus drei Buchstaben bestehenden Abkürzungen für Zeitzonen. Viele sind mehrdeutig. EET ist wirklich nur eine halbe Zeitzone, da einige Orte, an denen es verwendet wird, jetzt auf EEST (Sommerzeit) liegen. Verwenden Sie besser entweder eine lange Zeitzonen-ID wie
Europe/Bucharest
oder ein Offset von UTC wie+02:00
.
Diese Punkte gelten unabhängig davon, ob Sie DateTimeFormatter
verwenden oder SimpleDateFormat
.
Wenn Sie nicht zu den empfohlenen neueren Klassen wechseln können oder wollen, lautet die Lösung für Ihren Code:
SimpleDateFormat formatnow
= new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.ENGLISH);
SimpleDateFormat formatneeded = new SimpleDateFormat("yyyy-MM-dd");
Ich verwende zzz
in Kleinbuchstaben Da dies dokumentiert ist, um einem Zeitzonennamen aus drei Buchstaben zu entsprechen, kenne ich diesen Großbuchstaben ZZZ
funktioniert auch. Ich habe Gebietsschema hinzugefügt. Und vielleicht am wichtigsten, im benötigten Format habe ich YYYY
geändert (Wochenbasiertes Jahr) bis yyyy
(Kalenderjahr) und DD
(Tag des Jahres) bis dd
(Monatstag). Alle diese Buchstaben sind in der Dokumentation
.