withZoneSameInstant() 会根据前后时区的时差,修改小时数;
withZoneSameLocal() 维持年月日时分秒不变,仅修改时区。
public static void main(String[] args) {
String timeStr = "2020-04-01 14:30:00";
// 根据格式创建格式化类
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
// 从字符串解析得到会议时间
LocalDateTime Time = LocalDateTime.parse(timeStr, formatter);
// timeStr 伦敦时间
ZonedDateTime zonedTime = ZonedDateTime.of(Time,ZoneId.of("Asia/Shanghai"));
System.out.println("withZoneSameLocal 只改变时区");
ZonedDateTime nowWithZoneSameLocal = zonedTime.withZoneSameLocal(ZoneId.of("America/Chicago"));
System.out.println(nowWithZoneSameLocal);
String showTimeStrWithZoneSameLocal = formatter.format(nowWithZoneSameLocal);
System.out.println(showTimeStrWithZoneSameLocal);
System.out.println("withZoneSameInstant 按照时区改变时间");
ZonedDateTime nowWithZoneSameInstant = zonedTime.withZoneSameInstant(ZoneId.of("America/Chicago"));
System.out.println(nowWithZoneSameInstant);
String showTimeStrWithZoneSameInstant = formatter.format(nowWithZoneSameInstant);
System.out.println(showTimeStrWithZoneSameInstant);
}
输出:
withZoneSameLocal 只改变时区
2020-04-01T14:30-05:00[America/Chicago]
2020-04-01 14:30:00
withZoneSameInstant 按照时区改变时间
2020-04-01T01:30-05:00[America/Chicago]
2020-04-01 01:30:00