2015-12-06 127 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()',我认为这是个问题。 –

相关问题