2016-04-12 103 views
0

我正在使用Java 8並嘗試將時區從一個時區轉換爲另一個時區。時間戳將在用戶的時區中,例如將時區從一個時區轉換爲當地時區

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

然而,使用約達時間,或Java 8時LocalDateTime /即時,當我通過時間戳,將其調整到用戶的時區 - 我不需要這樣的事情發生,因爲它已經在用戶的時區(所有時間戳將在用戶的當地時間發送)。

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

結果

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

,而不是

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

有沒有解決這個辦法嗎?

謝謝!

+0

我害怕你的陳述「是用戶的時間戳ime區「。表示誤解了諸如「1460372400000L」之類的時間戳的含義。這種全球時間戳與任何時區都沒有關係,只是固定爲UTC + 00:00。 –

回答

1

1460372400000L是​​或Mon, 11 Apr 2016 12:00:00 BST

2016-04-11T11:00:00Z2016-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'的用途。沒有時區的日期時間。 –

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); 
相關問題