1. ホーム
  2. java

[解決済み] 指定されたタイムゾーンの日付/時刻を変換する - java

2023-05-18 11:41:49

質問

このGMTのタイムスタンプをGMT+13に変換したいのですが、どうすればいいですか?

2011-10-06 03:35:05

私は、この非常に基本的なタスクを実行するために、DateFormat、TimeZone、Date、GregorianCalendarなどの約100の異なる組み合わせを試したことがあります。

このコードは、現在の時間について私が望むことを行います。

Calendar calendar = new GregorianCalendar(TimeZone.getTimeZone("GMT"));

DateFormat formatter = new SimpleDateFormat("dd MMM yyyy HH:mm:ss z");    
formatter.setTimeZone(TimeZone.getTimeZone("GMT+13"));  

String newZealandTime = formatter.format(calendar.getTime());

しかし、私が欲しいのは、現在の時刻を使うのではなく、時刻を設定することです。

このように時刻を設定しようとすると、いつでもそうなることがわかりました。

calendar.setTime(new Date(1317816735000L));

の場合、ローカルマシンのTimeZoneが使用されます。なぜでしょうか?私は "new Date()" が UTC+0 時間を返すことを知っていますが、なぜ時間をミリ秒で設定すると、もはや時間が UTC であると見なされないのですか?

それは可能でしょうか。

  1. オブジェクトに時刻を設定する(カレンダー/日付/タイムスタンプ)
  2. (可能性あり) 最初のタイムスタンプのTimeZoneを設定(calendar.setTimeZone(...))
  3. 新しいTimeZoneでタイムスタンプをフォーマットする(formatter.setTimeZone(...))
  4. 新しいタイムゾーンの時刻を文字列で返します。(formatter.format(calendar.getTime()))。

助けてくれてありがとうございます :D

どのように解決するのですか?

私の場合、一番簡単な方法は

Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");

//Here you say to java the initial timezone. This is the secret
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
//Will print in UTC
System.out.println(sdf.format(calendar.getTime()));    

//Here you set to your timezone
sdf.setTimeZone(TimeZone.getDefault());
//Will print on your default Timezone
System.out.println(sdf.format(calendar.getTime()));