2017-10-28 14 views
-1

私はユーザーから別のタイムゾーンに時間を変換したいと思います。私は現在の時間だけ答えを得ることができます。そして私は日付を表示したくない。Javaの異なるタイムゾーン間の時間を変換する

入力は、日付のないユーザーの時間です。別のタイムゾーンに変換するにはどうすればよいですか?

String f = (String)c1.getItemAt(c1.getSelectedIndex()); 
    String t = (String)c2.getItemAt(c2.getSelectedIndex()); 
    TimeZone fromTimeZone = TimeZone.getTimeZone(f); 
    TimeZone toTimeZone = TimeZone.getTimeZone(t); 
    calendar.setTimeZone(fromTimeZone);             
    calendar.add(Calendar.MILLISECOND,fromTimeZone.getRawOffset() * -1);         
    calendar.add(Calendar.MILLISECOND,toTimeZone.getRawOffset()); 
    System.out.println(calendar.getTime(); 
+1

あなたはあなたのコードを表示する必要があります。そうでなければ、どうやって間違っているのか見せてくれると思いますか? – Ray

+1

あなたが試したことをより詳しく説明してください - あなたのコードを示してください。また、同じ種類の質問がStackOverflowで何度も何度も尋ねられているので、検索を行います。 – Jesper

+0

ポストa [mcve] .. – user1803551

答えて

0

今のところ、それは正確に何をしたい/必要性をクリアしていないので、私は念のためにいくつかのスニペットを投稿するつもりです。 私はこの目的でZonedDateTimeを使用します。 ZonedDateTime.now()は現在の日付と時刻を返します。あなたが任意の日付/時刻を作成することができますこの方法:

String zdtString = "2017-01-26T14:00:00+03:00"; // zone UTC +3 hours 
ZonedDateTime zdt = ZonedDateTime.parse(zdtString, DateTimeFormatter.ISO_DATE_TIME); 

ゾーンはこの方法で作成することができます。

ZoneId zone = ZoneId.of("Europe/Moscow"); 
ZoneId zone1 = ZoneId.of("+03:00"); // offset used 

別のタイムゾーンにZonedDateTimeを変換する方法があります。新しいゾーンで14:00を取得する場合は、zdt.withZoneSameInstant(ZoneId.of( "Asia/Yekaterinburg"))を使用します。 ゾーンで14:00 + 03:00の時間を知りたい場合は、zdt.withZoneSameLocal(yourZone)を使用してください。

zdt.toString()を使用すると、デフォルトの文字列表現。もちろん、ZonedDateTimeをフォーマットすることができます。フォーマットの

DateTimeFormatter dtf1 = DateTimeFormatter.ofPattern("HH:mm"); 
System.out.println(zdt.format(dtf1)); 

ドキュメント:documentation

+0

良い答えですが、タイムゾーンではなくUTCからの単なるオフセットを使用する場合は、クラス 'ZoneOffset'と' OffsetDateTime'を使用してください。ゾーンとオフセットの両方の例を表示する場合は、答えを2つに分けて分かりやすく表示することをお勧めします。 –

関連する問題