2016-04-12 6 views
0

Java 8を使用してタイムゾーンをタイムゾーンからタイムゾーンに変換しようとしています。タイムスタンプはユーザのタイムゾーン内にある。タイムゾーンをローカルタイムゾーンに変換する

// 2016-04-11T12:00:00Z 
long sourceTime = 1460372400000L; 
timezoneConverter(sourceTime, "America/New_York"); 

しかし、私は、タイムスタンプを渡すとき、それはユーザーのタイムゾーンに調整され、ジョダ時間、またはインスタントのJava 8のLocalDateTimeを/使用しているとき - それはすでにあるように私は、行われるようにする必要はありませんユーザーのタイムゾーン(すべてのタイムスタンプはユーザーの現地時間で送信されます)。

2016-04-11T07:00-04:00[America/New_York] 

代わりの

2016-04-11T12:00-04:00[America/New_York] 

ZonedDateTime zdt = 
    ZonedDateTime.ofInstant(Instant.ofEpochMilli(1460372400000L), 
          ZoneId.of("America/New_York")) 

の結果は、この周りに方法はありますか?

ありがとうございます!

+0

私は恐怖を使用することをお勧めあなたのステートメント "は、ユーザーのtからのタイムスタンプですイメージゾーン。 '1460372400000L'のようなタイムスタンプの意味の誤解を示しています。この種のグローバルタイムスタンプは、どのタイムゾーンにも関係なく、UTC + 00:00に固定されています。 –

答えて

1

1460372400000Lは​​またはMon, 11 Apr 2016 12:00:00 BST

2016-04-11T11:00:00Zある2016-04-11T07:00-04:00[America/New_York]あるので、あなたは別のタイムゾーンから変換しています。

あなただけのローカルタイムゾーンをしたい場合、私はあなたがLocalDateTime

LocalDateTime dt = LocalDateTime.ofEpochSecond(1460376000L, 0 , ZoneOffset.ofHours(0)); 
System.out.println(dt); 

プリント

2016-04-11T12:00 
+0

私の場合、タイムスタンプは調整しないでください。タイムスタンプはユーザーのタイムゾーンからのものです。 – KingTravisG

+0

@ StephenWithAPh1986これは 'LocalDateTime'が対象とするものです。タイムゾーンのないDateTime。 –

0
long sourceTime = 1460372400000L; 
//Select your timezone 
TimeZone utcTimeZone = TimeZone.getTimeZone("UTC"); 
Calendar calendar = new GregorianCalendar(utcTimeZone); 
calendar.setTimeInMillis(sourceTime); 

//現在のタイムゾーンを取得します

LocalTime time = LocalTime.now(); 
System.out.println("Local Time Zone: "+ZoneId.systemDefault().toString()); 
System.out.println("Current local time : " + time); 
関連する問題