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);
java.time
で最新のクラスを使用しています パッケージ。コードが単純であるだけでなく、新しいクラスの流暢な文体に慣れれば、コードも明確になります。
100%最新の状態にしたい場合は、最新のMySQLJDBCドライバーがLocalDate
を受け入れないかどうかも確認する必要があります。 java.sql.Date
に変換せずに直接 。すべきです。
注意すべきいくつかの詳細
- 制御できないコンピューターでコードを実行する必要がある場合は、常にフォーマッターにロケールを指定してください。そうしないと、英語を話さないロケールのコンピューターで日付文字列を解析できません。
Locale.ROOT
を使用できます ロケールニュートラルロケールの場合(英語を話します)。 - 可能であれば、3文字のタイムゾーンの省略形は避けてください。多くはあいまいです。 EETは、現在EEST(夏時間)に使用されている場所があるため、実際には半分のタイムゾーンにすぎません。
Europe/Bucharest
のような長いタイムゾーンIDを使用することをお勧めします または+02:00
のようなUTCからのオフセット 。
これらのポイントは、DateTimeFormatter
を使用するかどうかに関係なく有効です。 またはSimpleDateFormat
。
推奨される新しいクラスに進むことができない、またはしたくない場合、コードの修正は次のとおりです。
SimpleDateFormat formatnow
= new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.ENGLISH);
SimpleDateFormat formatneeded = new SimpleDateFormat("yyyy-MM-dd");
小文字のzzz
を使用しています これは3文字のタイムゾーン名と一致するように文書化されているため、大文字のZZZ
も動作します。ロケールを追加しました。そしておそらく最も重要なのは、必要な形式でYYYY
を変更したことです。 (週ベースの年)からyyyy
(暦年)およびDD
(年の日)からdd
(月の日)。これらの文字はすべて、ドキュメント
にあります。 。