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

Linda Hamilton
リリース: 2024-10-30 03:06:28
オリジナル
446 人が閲覧しました

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

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

SimpleDateFormat を使用して UNIX タイムスタンプを日付に変換する場合、指定した形式とこの例では、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 のようなクラスを提供します。

例:

このコードは UNIX を変換します。タイムスタンプを LocalDateTime に変換し、MySQL データベースに直接挿入できます。
<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();

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);</code>
ログイン後にコピー

結論:

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

以上がUNIX タイムスタンプを日付に変換するときに、SimpleDateFormat.parse の出力が指定されたものと異なるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート