ホームページ  >  記事  >  Java  >  Java コードが日付と時刻を CST に誤って変換するのはなぜですか?それを修正するにはどうすればよいですか?

Java コードが日付と時刻を CST に誤って変換するのはなぜですか?それを修正するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-26 22:09:29489ブラウズ

Why is my Java code converting date and time to CST incorrectly, and how can I fix it?

Java で日付と時刻を特定のタイムゾーンに変換する

この Java プログラムは、現在のシステムの日付と時刻を特定のタイムゾーンに変換することを目的としています。 。ただし、提供されたコードでは不正確な結果が得られ、インドから中部標準時 (CST) に変換する際に時間の不一致が示されます。

タイムゾーンの変換について

タイムゾーンは地域です同じ標準時を使用するもの。別のタイムゾーンで同等の時間を計算する場合は、タイムゾーンのオフセットと夏時間 (DST) 設定の違いを調整する必要があります。

コードの分析

このコードは、SimpleDateFormat クラスと Calendar クラスに依存して日付と時刻の値を操作します。次の手順を使用して、現在のシステム時刻を CST に変換しようとします。

  1. Calendar を使用して現在の日付と時刻を取得します。
  2. SimpleDateFormat を使用して日付と時刻を文字列に解析します。
  3. TimeZone を使用して CST タイムゾーンを取得し、SimpleDateFormat オブジェクトのタイムゾーンとして設定します。
  4. CST タイムゾーンを使用して日付と時刻の文字列を解析します。
  5. 変換された日付を出力します。

不一致への対処

この不一致は、コードがタイム ゾーン オフセットと DST 設定を適切に調整していないために発生します。提供されているコードは生のタイム ゾーン オフセットのみを調整しますが、DST は考慮していません。

解決策

この問題に対処するには、コードは生のタイム ゾーン オフセットの両方を調整する必要があります。オフセットと DST の節約。次の修正されたコードは、調整を示しています。

<code class="java">Calendar calendar = Calendar.getInstance();
TimeZone fromTimeZone = calendar.getTimeZone();
TimeZone toTimeZone = TimeZone.getTimeZone("CST");

// Adjust for raw time zone offset
calendar.add(Calendar.MILLISECOND, fromTimeZone.getRawOffset() * -1);

// Adjust for daylight saving time
if (fromTimeZone.inDaylightTime(calendar.getTime())) {
    calendar.add(Calendar.MILLISECOND, calendar.getTimeZone().getDSTSavings() * -1);
}

// Adjust to target time zone
calendar.add(Calendar.MILLISECOND, toTimeZone.getRawOffset());
if (toTimeZone.inDaylightTime(calendar.getTime())) {
    calendar.add(Calendar.MILLISECOND, toTimeZone.getDSTSavings());
}

System.out.println(calendar.getTime());</code>

これらの調整を追加すると、コードは DST 調整を含め、日付と時刻を指定されたタイムゾーンに正確に変換します。

以上がJava コードが日付と時刻を CST に誤って変換するのはなぜですか?それを修正するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。