web-dev-qa-db-ja.com

任意のタイムゾーンの日付と時刻をUTCゾーンに変換します

  • これは私の日付です "15-05-201400:00:00"

  • iSTをUTCに変換する方法(つまり、2014年5月14日18:30:00)

  • タイムゾーンからUTCタイムゾーンに基づいています。

私のコードは

DateFormat formatter = new SimpleDateFormat("dd MMM yyyy HH:mm:ss");

formatter.setTimeZone(TimeZone.getTimeZone("IST"));  //here set timezone

System.out.println(formatter.format(date));  
formatter.setTimeZone(TimeZone.getTimeZone("UTC"));  //static UTC timezone

System.out.println(formatter.format(date));  
String str = formatter.format(date);
Date date1  = formatter.parse(str);
System.out.println(date1.toString());
  • ユーザーがいずれかのゾーンから同じ日付を入力すると、UTC時刻が取得されます(例:オーストラリアから、2014年5月15日00:00:00から2014年5月14日16:00:00)

  • 何か提案をしてください。

8
user3599212

「その日付値を他のタイムゾーンまたはUTCに変換」することはできません。タイプJava.util.Dateには内部タイムゾーン状態がなく、仕様によって変更できない方法でUTCのみを参照します。ユーザー(UTCタイムゾーンでUNIXエポックからのミリ秒を数えるだけで、飛躍的な秒数は残ります)。

ただし、Java.util.Dateのフォーマットされた文字列表現を別のタイムゾーンに変換できます。タイムゾーン(およびパターン)ごとに1つずつ、2つの異なるフォーマッターを使用することを好みます。また、「アジア/コルカタ」を使用することをお勧めします。これは、普遍的に機能するためです(ISTは、イスラエルでは異なる解釈が行われる「イスラエル標準時」の場合もあります)。

DateFormat formatterIST = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
formatterIST.setTimeZone(TimeZone.getTimeZone("Asia/Kolkata")); // better than using IST
Date date = formatterIST.parse("15-05-2014 00:00:00");
System.out.println(formatterIST.format(date)); // output: 15-05-2014 00:00:00

DateFormat formatterUTC = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
formatterUTC.setTimeZone(TimeZone.getTimeZone("UTC")); // UTC timezone
System.out.println(formatterUTC.format(date)); // output: 14-05-2014 18:30:00

// output in system timezone using pattern "EEE MMM dd HH:mm:ss zzz yyyy"
System.out.println(date.toString()); // output in my timezone: Wed May 14 20:30:00 CEST 2014
13
Meno Hochschild