2015-12-06 160 views
3

我試圖使用ZonedDateTime將日期06-12-2015 02:10:10 PM從默認區域轉換爲UTC。如何使用ZonedDateTime或Java 8將任何日期時間轉換爲UTC

LocalDateTime localDateTime = LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault()); 
ZonedDateTime utc = ZonedDateTime.of(localDateTime, ZoneOffset.UTC); 

utc回報2015-12-06T14:10:10Z代替06-12-2015 09:10:10 AM

我如何轉換從默認區域日期UTC?給出的答案here將當前時間轉換爲UTC。

回答

7

您可以使用ZonedDateTime.ofInstant(Instant, ZoneId)其中第二個參數是UTC(即時知道本地偏移量)。喜歡的東西,

String source = "06-12-2015 02:10:10 PM"; 
String pattern = "MM-dd-yyyy hh:mm:ss a"; 
DateFormat sdf = new SimpleDateFormat(pattern); 
try { 
    Date date = sdf.parse(source); 
    ZonedDateTime zdt = ZonedDateTime.ofInstant(date.toInstant(), ZoneId.of("UTC")); 
    System.out.println(zdt.format(DateTimeFormatter.ofPattern(pattern))); 
} catch (ParseException e) { 
    e.printStackTrace(); 
} 

我也得到(對應於我的本地區域偏移)

06-12-2015 06:10:10 PM 
+2

如果我這樣做'日期日期1 = Date.from(zdt.toInstant())'返回原來的時間'06-12-2015 02:10:10 PM'爲什麼? –

+0

爲什麼要將SimpleDateFormat與java.time代碼混合?爲什麼不讓java.time做解析? –

+0

@BasilBourque OP的代碼包含'date.toInstant()',我認爲這是個問題。 –

相關問題