ZoneDateTime中withZoneSameInstant 和 withZoneSameLocal

802 阅读1分钟
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