ホームページ >Java >&#&チュートリアル >特定のタイムゾーンに変換すると、Java コードで間違った時刻が表示されるのはなぜですか?それを修正するにはどうすればよいですか?
Java での特定のタイムゾーンへの日付と時刻の変換
現在のシステムの日付と時刻を特定のタイムゾーンに変換しようとすると、予想される出力と、目的のタイムゾーンでの実際の時刻との間に不一致が発生しました。この問題に対処するために、ご提供いただいたコードを詳しく調査し、時差の潜在的な原因を特定します。
このコードでは、Calendar クラスと SimpleDateFormat クラスを使用して日付と時刻の操作を処理します。現在時刻を currentdate に設定し、フォーマッタ オブジェクトを使用して文字列としてフォーマットします。次に、ターゲットのタイムゾーン (この場合は CST) の TimeZone オブジェクトを作成し、それをフォーマッタのタイムゾーンとして設定します。最後に、書式設定された日付文字列を解析して、指定されたタイムゾーンでの結果の日付を取得します。
この不一致は、フォーマッタが日付をターゲット タイムゾーンに変換する前にローカル タイムゾーンで書式設定するため発生します。これを考慮するには、ローカル タイムゾーンとターゲット タイムゾーンの間のオフセットの差を加算または減算して、時刻を明示的に調整する必要があります。
正しい時刻変換を提供する更新されたコード スニペットは次のとおりです。
<code class="java">// Create a calendar and set it to the local timezone Calendar calendar = Calendar.getInstance(); TimeZone fromTimeZone = calendar.getTimeZone(); // Create a calendar for the target timezone TimeZone toTimeZone = TimeZone.getTimeZone("CST"); // Convert the current time to the local timezone calendar.setTimeZone(fromTimeZone); calendar.add(Calendar.MILLISECOND, fromTimeZone.getRawOffset() * -1); if (fromTimeZone.inDaylightTime(calendar.getTime())) { calendar.add(Calendar.MILLISECOND, calendar.getTimeZone().getDSTSavings() * -1); } // Convert the time to the target timezone calendar.add(Calendar.MILLISECOND, toTimeZone.getRawOffset()); if (toTimeZone.inDaylightTime(calendar.getTime())) { calendar.add(Calendar.MILLISECOND, toTimeZone.getDSTSavings()); } // Get the final date and time in the target timezone Date theResult = calendar.getTime(); System.out.println("The current time in India is :: " + currentdate.getTime()); System.out.println("The date and time in :: " + toTimeZone.getDisplayName() + " is ::" + theResult);</code>
タイムゾーン オフセットに従って時間を調整することで、指定したタイムゾーンで正しい日付と時刻を取得できるようになります。
以上が特定のタイムゾーンに変換すると、Java コードで間違った時刻が表示されるのはなぜですか?それを修正するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。