ZoneDateTime vs LocalDateTime

2021-09-15  本文已影响0人  程序员小白成长记
public class ZoneDateTimeLocalDateTime {

    public static void main(String[] args) {
        // 时间戳的概念:格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数
        // 时间转为时间戳时首先需要计算到格林威治时间的毫秒数,再去除当前时区到0时区(UTC)的偏移量
        LocalDateTime localDateTime = LocalDateTime.of(2021, 9, 14, 11, 13, 0, 0);
        // 2021-09-14T11:13
        System.out.println(localDateTime);
        // 对应的时间戳转为北京时间为2021-09-14 19:13:00
        // 1631617980
        System.out.println(localDateTime.toEpochSecond(ZoneOffset.UTC));
        // 对应的时间戳转为北京时间为2021-09-14 11:13:00
        // 1631589180,会把初始化的时间当作一个8时区的时间转为时间戳
        System.out.println(localDateTime.toEpochSecond(ZoneOffset.ofHours(8)));


        ZonedDateTime zonedDateTime = ZonedDateTime.of(2021, 9, 14, 11, 13, 0, 0, ZoneOffset.UTC);
        // 2021-09-14T11:13Z
        System.out.println(zonedDateTime);
        // 输出 Z:“Z”是协调世界时中0时区的标志
        System.out.println(zonedDateTime.getZone());
        // 对应的时间戳转为北京时间为2021-09-14 19:13:00
        // 1631617980,因为ZonedDateTime本身带有时区,所以toEpochSecond()不能传入时区参数
        System.out.println(zonedDateTime.toEpochSecond());

        ZonedDateTime zonedDateTime_now = ZonedDateTime.now(ZoneOffset.UTC);
        // 比当前北京时间少8个小时
        System.out.println("zonedDateTime_now: " + zonedDateTime_now);
    }
}

参考

【1】java中ZonedDateTime,LocalDateTime,Date,Calendar,Instant,timestamp的比较区别:https://blog.csdn.net/huang007guo/article/details/104019643
【2】时区相关知识扫盲:https://blog.csdn.net/nextyu/article/details/78480371

上一篇 下一篇

猜你喜欢

热点阅读