2017-02-16 63 views
2

假設一個星期前我生成2015-10-10T10:00:00的LocalDateTime。此外,讓我們假設我生成我當前時區ID這樣根據當前時區與東部時區的時差,更改LocalDateTime

TimeZone timeZone = TimeZone.getDefault(); 
String zoneId = timeZone.getId(); // "America/Chicago" 

而我是了zoneid「美國/芝加哥」。

有沒有一種簡單的方法,我可以將我的LocalDateTime轉換爲時區ID爲「America/New_York」的一個(即我的更新LocalDateTime將2015-10-10T11:00:00)?

更重要的是,有沒有一種方法可以將我的LocalDateTime轉換爲東部時間(即,到zoneId爲「America/New_York」的時區),無論我在哪個時區?我特意尋找一種方法來處理過去生成的任何LocalDateTime對象,而不是在當前時間。

+0

'LocalDateTime.now(ZoneId.of( 「美國/紐約」));' –

+0

對不起,我專門尋找一種方式來生成基於一個LocalDateTime,我可以有時間過去產生。這隻會得到當前的LocalDateTime。 –

回答

3

要將LocalDateTime轉換到另一個時區,你先申請使用atZone()原來的時區,它返回一個ZonedDateTime,然後轉換爲使用withZoneSameInstant()新的時區,最後的結果轉換回LocalDateTime

LocalDateTime oldDateTime = LocalDateTime.parse("2015-10-10T10:00:00"); 
ZoneId oldZone = ZoneId.of("America/Chicago"); 

ZoneId newZone = ZoneId.of("America/New_York"); 
LocalDateTime newDateTime = oldDateTime.atZone(oldZone) 
             .withZoneSameInstant(newZone) 
             .toLocalDateTime(); 
System.out.println(newDateTime.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME)); 
2015-10-10T11:00:00 

如果跳過最後一步,你會保留區。

ZonedDateTime newDateTime = oldDateTime.atZone(oldZone) 
             .withZoneSameInstant(newZone); 
System.out.println(newDateTime.format(DateTimeFormatter.ISO_DATE_TIME)); 
2015-10-10T11:00:00-04:00[America/New_York]