网站app软件,网站建设类论文格式,网络科技有限,如何用外网ip做网站LocalDateTimeLocalDateTime本身不包含时区信息#xff0c;它存储的是年、月、日、时分秒#xff0c;纳秒这样的数字。在不同的时区下#xff0c;这样的数字代表不同的时间。比如一个LocalDateTime存储2020-01-01 08#xff1a;00#xff1a;00#xff0c;这里省略纳秒。…LocalDateTimeLocalDateTime本身不包含时区信息它存储的是年、月、日、时分秒纳秒这样的数字。在不同的时区下这样的数字代表不同的时间。比如一个LocalDateTime存储2020-01-01 080000这里省略纳秒。对北京和东京的人来看这个时间都认为是本地时间的话在真实时间上因为时区的差异其实是相差1个小时的时间的。构造函数既然不带时区那么考虑LocalDateTime的构造函数LocalDateTime dtUtc LocalDateTime.now(ZoneOffset.UTC);为什么这里又有时区了呢其实这是一个方便的方法如果只是为了获取当前系统所在默认时区的一个本地时间那么用LocalDateTime.now()无参数构造方法即可而如果我想知道现在在UTC时区那里本地显示的是什么时间就可以用LocalDateTime.now(ZoneOffset.UTC)这个构造方法了。所以对于我们东八区来说//假如这个时间是2020-01-01 10:00:00LocalDateTime dtLocal LocalDateTime.now();//那么这个时间就会存储2020-01-01 02:00:00提前8个小时LocalDateTime dtUtc LocalDateTime.now(ZoneOffset.UTC);在构造后LocalDateTime同样不携带时区信息仍然只是表示一个显示时间而已。DateDate存储的是一个毫秒数准确说是从1970-01-01 00:00:00到现在经过的毫秒数。而这个毫秒数是有时区的它存储的永远是现在针对UTC时区时的1970年零点经过的毫秒数。怎么理解比如两个程序员在同一时刻一个在英国一个在中国同时调用new Date()那么此时Date中存储的毫秒数是完全相同的(当然是理想情况的同时以及系统没有误差)。所不同的是在输出时GMT0时区直接使用这个毫秒数计算得到显示时间而北京GMT8显示时会在这个时间上增加8小时即时区偏移。所以如下两个格式化类型在当前东八区的使用场景输出实际是一样的SimpleDateFormat bjSdf new SimpleDateFormat(yyyy-MM-dd HH:mm:ss); // 北京bjSdf.setTimeZone(TimeZone.getTimeZone(Asia/Shanghai)); // 设置北京时区SimpleDateFormat dftSdf new SimpleDateFormat(yyyy-MM-dd HH:mm:ss); // 不设置时区构造因为Date有时区信息所以构造Date也就需要时区信息。因此不能直接从LocalDateTime转换成Date因为无法确定这个LodalDateTime究竟是哪个时区的这个时间。而要借助Instant因为Instant也代表从UTC开始的一个偏移时间。LocalDateTime dt LocalDateTime.now();Date dt2 Date.from(dt.toInstant(ZoneOffset.of(8))); //东八区输出