「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > UNIX タイムスタンプを日付に変換するときに、SimpleDateFormat.parse の出力が指定されたものと異なるのはなぜですか?

UNIX タイムスタンプを日付に変換するときに、SimpleDateFormat.parse の出力が指定されたものと異なるのはなぜですか?

2024 年 11 月 9 日に公開
ブラウズ:869

Why does SimpleDateFormat.parse output differently than specified when converting UNIX timestamps to dates?

SimpleDateFormatter.parse の出力が指定したものと異なる

SimpleDateFormat を使用して UNIX タイムスタンプを日付に変換する場合、指定した形式とOutput.

この例では、目標は UNIX を変換することです。タイムスタンプ (「a1527069600」) を「dd/MM/yyyy hh:mm:ss a」形式の日付に変換します。ただし、SimpleDateFormatter.format の後に SimpleDateFormatter.parse を使用すると、異なる出力が生成されます。

不一致の原因

SimpleDateFormatter.parse は正確な文字列を期待しているため、不一致が発生します。インスタンス化時に指定された形式 (「dd/MM/yyyy hh:mm:ss a」)。この場合、SimpleDateFormatter.format は、予想される入力形式とは異なる形式で日付を出力するため、解析操作が失敗します。

解決策

この問題を回避するには、日付文字列を MySQL データベースに渡さないことをお勧めします。代わりに、日付オブジェクトを使用してください。最新の Java 日付と時刻 API java.time は、日付の処理を容易にする LocalDateTime のようなクラスを提供します。

例:

String ep = "a1527069600";
long epoch = Long.parseLong(ep.substring(1));
Instant inst = Instant.ofEpochSecond(epoch);
LocalDateTime ldt = inst.atZone(ZoneId.of("Asia/Calcutta")).toLocalDateTime();

System.out.println(ldt.toString()); // Output: 2018-05-23T15:30

PreparedStatement ps = myDatabaseConnection.prepareStatement(
        "insert into my_table (my_date_time) values (?)");
ps.setObject(1, ldt);
String ep = "a1527069600 "; 長いエポック = Long.parseLong(ep.substring(1)); インスタント inst = Instant.ofEpochSecond(epoch); LocalDateTime ldt = inst.atZone(ZoneId.of("アジア/カルカッタ")).toLocalDateTime(); System.out.println(ldt.toString()); // 出力: 2018-05-23T15:30 PreparedStatement ps = myDatabaseConnection.prepareStatement( "my_table (my_date_time) 値に挿入 (?)"); ps.setObject(1, ldt);

このコードは、UNIX タイムスタンプを LocalDateTime に変換し、MySQL データベースに直接挿入できます。

結論:

java.time を利用し、文字列の代わりに日付オブジェクトを MySQL に渡すことで、書式設定の問題を排除し、日付の正確さを確保できます。 変換。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3