Java タイムスタンプを使用してタイム ゾーンを変換する方法
このシナリオでは、EST タイム ゾーンのタイムスタンプがあるため、それを変換する必要がありますWeb サービス呼び出しの場合は GMT まで。詳細な説明は次のとおりです。
EST から GMT への変換
タイムスタンプ値は最初は GMT であると想定されているが、実際には GMT である可能性があるために問題が発生します。ローカルタイムゾーン (この場合は EST) が異なります。ユーザーのパラメータを EST から GMT に変換するには、2 つのタイムゾーン間の時差を考慮する必要があります。
Calendar クラスの使用
を使用していますタイムスタンプを操作するための Calendar クラス。ただし、Calendar クラスは、指定したタイム ゾーンに関係なく、常にエポック以降のミリ秒単位で動作することに注意してください。これは、Calendar.getInstance(GMT_TIMEZONE) を使用してタイムスタンプからカレンダーを作成する場合、基になる日付が GMT タイム ゾーンに一致するように調整されないことを意味します。
解決策: タイム ゾーン オフセットの調整
タイムスタンプを GMT に正確に変換するには、タイム ゾーン オフセットを考慮する必要があります。次のコード スニペットは、解決策を提供します。
public static Calendar convertToGmt(Calendar cal) { Date date = cal.getTime(); TimeZone tz = cal.getTimeZone(); // Compute milliseconds since epoch in GMT long msFromEpochGmt = date.getTime(); // Get offset from UTC in milliseconds at the given time int offsetFromUTC = tz.getOffset(msFromEpochGmt); // Create a new Calendar in GMT and adjust the date with the offset Calendar gmtCal = Calendar.getInstance(TimeZone.getTimeZone("GMT")); gmtCal.setTime(date); gmtCal.add(Calendar.MILLISECOND, offsetFromUTC); return gmtCal; }
出力例
現在時刻 (EDT) を ConvertToGmt メソッドに渡すと、次の出力:
DEBUG - input calendar has date [Thu Oct 23 12:09:05 EDT 2008] DEBUG - offset is -14400000 DEBUG - Created GMT cal with date [Thu Oct 23 08:09:05 EDT 2008]
これは、12:09:05 EDT が 08:09:05 GMT に正常に変換されたことを示しています。
以上がJavaでESTタイムスタンプをGMTに変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。