UTC:协调世界时,又称世界统一时间、世界标准时间、国际协调时间。
LocalDateTime是java8新增的一种时间类型
转换思路,先将UTC格式的时间转换成Date类型的,然后将Date类型的时间转换成LocalDateTime类型的。
public static LocalDateTime utcToLocalDateTime(String utcTime){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
Date utcDate = null;
try {
utcDate = sdf.parse(utcTime);
} catch (ParseException e) {
e.printStackTrace();
}
Instant instant = utcDate.toInstant();
ZoneId zoneId = ZoneId.systemDefault();
LocalDateTime localDateTime = instant.atZone(zoneId).toLocalDateTime();
return localDateTime;
}
测试数据:
String utcTime = "2018-08-06T10:00:00.00Z";
测试结果:2018-08-06T18:00
东八区时间比UTC时间多8个小时,结果正确。
注意事项:SimpleDateFormat指定的格式化类型如上面代码所示,刚开始时指定的yyyy-MM-dd HH:mm:ss,会报转换异常,导致转换成功。经查阅得知,格式化的长度要跟转换的字符串长度保持一致,否则就会报错。(虽然不知道对错,但换成上面的这种格式化样式确实成功了)。