2015-08-22 94 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));