0

私の基本的なクエリは、特定の場所の時間を別の場所の対応する時間に変換することです。例: インドで 23:30 のとき、ロサンゼルスでは何時ですか? ドイツで10:00のとき、ロサンゼルスでの時間は?

与えられた入力は、ターゲットと相対的な場所のタイムゾーン、および変換される時間でした。

例: 入力 ["America/Los_angeles" , "Germany" , "23:00"]

次のようなさまざまなアプローチを試しました。

1) 両方のタイムゾーンで現在の時刻を取得し、差を見つけて時刻に追加します。

2) 以下のコードを使用:

String target_timezone = "America/Los_Angeles";
    String rel_timezone ="Germany";
     Calendar rel_calender = new GregorianCalendar(TimeZone.getTimeZone(rel_timezone));

     rel_calender.set(Calendar.HOUR, Integer.parseInt(arr[0]));
     rel_calender.set(Calendar.MINUTE, Integer.parseInt(arr[1]));
     rel_calender.set(Calendar.SECOND, 00);

     Calendar TargetTime = new GregorianCalendar(TimeZone.getTimeZone(target_timezone));
     TargetTime.setTimeInMillis(rel_calender.getTimeInMillis());
     SimpleDateFormat f = new SimpleDateFormat("EEEE,yyyy-MM-dd hh:mm a Z");
     System.out.println("time in  " + target_timezone + "when it is 17:00 in " + rel_timezone + ": " );
     System.out.println((TargetTime.get(Calendar.DST_OFFSET)));
     System.out.print((TargetTime.get(Calendar.HOUR)));
     System.out.print(":" +(TargetTime.get(Calendar.MINUTE)));
     System.out.println(":" +(TargetTime.get(Calendar.SECOND)));
     System.out.println((TargetTime.get(Calendar.YEAR)));

年が間違っています。

これを行うより良い方法はありますか?Calendar、SimpleDateFormat、および Date のさまざまな方法を無駄に試しました。基本的な Java ユーティリティのみを使用でき、Joda ユーティリティは使用できません。前もって感謝します 。

4

3 に答える 3

0

時刻を変換する最良の方法は、オフセットを適用して UTC に戻してから、そのオフセットを適用して必要な時刻に戻すことです。

例 :

11/09/2014 12:00 AM - インド - IST の UTC オフセットは +5:30 です。UTC オフセットが -6:00 である中部時間 (CST) に変換したいと考えていました。

12:00AM IST に相当する UTC = 6:30 PM UTC を取得します。

ここで、CST の UTC オフセットをこの UTC 時間に追加して、12:00AM IST に相当する CST を取得します。

2014 年 10 月 9 日午前 12 時 30 分です。

お役に立てれば..

于 2014-09-11T06:41:53.593 に答える
0

このコードを使用してください:

     Calendar rel_calender = new GregorianCalendar();

     rel_calender.set(Calendar.HOUR_OF_DAY, 17);
     rel_calender.set(Calendar.MINUTE, 00);
     rel_calender.set(Calendar.SECOND, 00);
     rel_calender.get(Calendar.HOUR);

     rel_calender.setTimeZone(TimeZone.getTimeZone(rel_timezone));

コードを使用する場合、rel_calendar 時間は 19 O'clock' (17+2 タイム オフセット) に設定されます。

于 2014-09-11T07:17:05.107 に答える