ZonedDateTime是带有时区的,也就是说除了内部的时间戳,还有一个时区字段。他可以指定当前字符串代表的时间是什么时区的时间。
LocalDateTime是不带时区的,他的内部保存的是LocalDate和LocalTime,它使用年、月、日、小时、分钟、秒和纳秒等字段来表示日期和时间的不同部分。LocalDateTime不能指定时区,所以在执行时区转换的时候,需要借助ZonedDateTime。
Date内部是使用一个时间戳表示时间的。在转换成Date的时候需要指定时区,这样转换之后的时间戳才是正确的。
LocalDateTime在生成的时候已经隐式包含了时区(字符串是什么时区的时间他就是什么时区的时间),Date在生成的时候需要指定时区(字符串+指定时区才是Date真正表示的时间),也就是Date可以让同一个字符串用不同的时区进行转换,LocalDateTime则不能。
localDateTime.toEpochSecond(ZoneOffset.of(“+8”)) 是生成时间戳,ZoneOffset的目的是,将时间戳输出为对应时区下,本实例所代表的时间X的时间戳,如果localDateTime是+2时区的时间字符串A,使用ZoneOffset.of(“+8”)之后得到的结果,再以+8时区转换成时间字符串,也是A,也就是抹掉了时区保持不同时区下时间字符串是一样的