2015-08-22 93 views
1

我有這段代碼,我的系統的默認時區是PDT。時區轉換後,finalDate在PDT中顯示時間。我如何讓它顯示「亞洲/新加坡」的最終日期?Java 8 LocalDateTime到日期丟失時區

String strDate = 201507081245; 
DateTimeFormatter mx3DateFormat = DateTimeFormatter.ofPattern("yyyyMMddHHmm"); 
LocalDateTime localDateTime = LocalDateTime.parse(strDate, format); 
Instant instant = localDateTime.atZone(ZoneId.of("Asia/Singapore")).toInstant(); 
Date finalDate = Date.from(instant); 
+0

的java.time框架完美。問題在於你對java.util.Date如何工作的誤解。請參閱Codebender的[正確答案](http://stackoverflow.com/a/32158403/642706)。爲了澄清其他讀者,儘量避免使用舊的java.util.Date&.Calendar類。 java.time類取代了那些老的麻煩類。在這個問題的代碼中,除非需要與其他一些尚未知道新java.time類型的代碼進行交互操作,否則不需要將最後一行從java.time轉換爲java.util.Date。 –

回答

3

A java.util.Date對象不是特定於特定時區。但其toString方法應用您的JVM當前的默認時區。

您可以要求它在DateFormat的特定時區打印時間,如SimpleDateFormat

喜歡的東西,

SimpleDateFormat dateFormat = new SimpleDateFormat("hhhhMMddHHmm"); 
    dateFormat.setTimeZone(TimeZone.getTimeZone("Asia/Singapore")); 
    System.out.println(dateFormat.format(finalDate));