SimpleDateFormatter.parse からのさまざまな出力形式
Java プログラムでは、SimpleDateFormat クラスを利用して日付を指定された形式に変換します。ただし、場合によっては、SimpleDateFormatter.parse を使用して日付を解析すると、書式設定中に指定した形式とは異なる形式になる可能性があることが確認されています。
この問題は、UNIX タイムスタンプを日付文字列に変換するときに発生します。簡略化した例を次に示します。
<code class="java">String ep ="a1527069600"; Long epoch = Long.parseLong(ep.substring(1, ep.length())); Date dt = new Date(epoch*1000L); SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss a"); sdf.setTimeZone(TimeZone.getTimeZone("Asia/Calcutta")); System.out.println("SDF.Format - "+sdf.format(dt)); System.out.println("SDF.parse - "+sdf.parse(sdf.format(dt)));</code>
この例では、sdf に指定された形式は「dd/MM/yyyy hh:mm:ss a」ですが、sdf.parse の出力は別の形式になります。 、「Wed May 23 15:30:00 IST 2018.」
解決策
この問題を解決するには、MySQL データベースに日付文字列を渡さないようにします。代わりに、日付オブジェクトを使用してください。 Java は、最新の日付と時刻を処理するための java.time API を提供します。特定のシナリオでは、LocalDateTime オブジェクトを使用できます。
<code class="java"> String ep ="a1527069600"; long epoch = Long.parseLong(ep.substring(1)); Instant inst = Instant.ofEpochSecond(epoch); LocalDateTime ldt = inst.atZone(ZoneId.of("Asia/Calcutta")).toLocalDateTime(); PreparedStatement ps = myDatabaseConnection.prepareStatement( "insert into my_table (my_date_time) values (?)"); ps.setObject(1, ldt);</code>
このアプローチにより、一貫した日付形式が確保され、SimpleDateFormatter.parse で発生する解析の問題が排除されます。
以上がUNIX タイムスタンプを変換するときに SimpleDateFormat.parse が予期しない出力を生成するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。