高级JAVA开发必备技能:java8 新日期时间API((二)JSR-310:常用的日期时间API)(JAVA 小虚竹)

高级JAVA开发必备技能:java8 新日期时间API((二)JSR-310:常用的日期时间API)(JAVA 小虚竹)

大家好,我是小虚竹。之前有粉丝私聊我,问能不能把JAVA8 新的日期时间API(JSR-310)知识点梳理出来。答案是肯定的,谁让我宠粉呢。由于内容偏多(超十万字了),会拆成多篇来写。


闲话就聊到这,请看下面的正文。


文章目录

常用的日期时间API简介

Clock

Clock类说明

FixedClock

Clock.fixed

Clock.fixed 跟 Offset 方法更配

OffsetClock

SystemClock

Clock.systemDefaultZone()

Clock.systemUTC()

结论

TickClock

Instant

Instant类说明

Instant常用的用法

Instant是没有时区的,但是Instant加上时区后,可以转化为ZonedDateTime

long型时间戳转Instant

Instant的坑

LocalDate

LocalDate类说明

LocalDate常用的用法

获取当前日期

获取localDate对象

获取指定日期的年月日

修改年月日

比较日期

LocalDate 和String相互转化、Date和LocalDate相互转化

LocalDate 和String相互转化

Date和LocalDate相互转化

LocalDateTime

LocalDateTime类说明

LocalDateTime常用的用法

获取当前日期和时间

获取指定日期和时间

日期时间的加减法及修改

LocalDateTime和Date相互转化

Date转LocalDateTime

LocalDateTime转Date

LocalTime

LocalTime类说明

LocalTime常用的用法

获取当前时间

获取LocalTime对象

获取指定日期的时分秒

修改时分秒

比较时间

OffsetDateTime

OffsetDateTime类说明

OffsetDateTime常用的用法

获取当前日期时间

获取OffsetDateTime对象

获取指定日期的年月日时分秒

修改年月日时分秒

比较日期时间

字符串转化为OffsetDateTime对象

OffsetTime

OffsetTime类说明

OffsetTime常用的用法

获取当前时间

获取OffsetTime对象

获取指定时间的时分秒

修改时分秒

比较时间

ZonedDateTime

ZonedDateTime类说明

ZonedDateTime常用的用法

获取当前日期时间

获取ZonedDateTime对象

获取指定日期的年月日时分秒

修改年月日时分秒

比较日期时间

LocalDateTime+ZoneId变ZonedDateTime

推荐相关文章

hutool日期时间系列文章

其他

常用的日期时间API简介

介绍下java8API比较常用的日期时间API,按java.time 包的类顺序:


Clock:时钟

Instant:瞬间时间。

LocalDate:本地日期。只有表示年月日

LocalDateTime:本地日期时间,LocalDate+LocalTime

LocalTime:本地时间,只有表示时分秒

OffsetDateTime:有时间偏移量的日期时间(不包含基于ZoneRegion的时间偏移量)

OffsetTime:有时间偏移量的时间

ZonedDateTime:有时间偏移量的日期时间(包含基于ZoneRegion的时间偏移量)

博主把这些类都点开看了,都是属于不可变类。而且官方也说了,java.time包 下的类都是线程安全的。


Clock

Clock类说明

高级JAVA开发必备技能:java8 新日期时间API((二)JSR-310:常用的日期时间API)(JAVA 小虚竹)高级JAVA开发必备技能:java8 新日期时间API((二)JSR-310:常用的日期时间API)(JAVA 小虚竹)高级JAVA开发必备技能:java8 新日期时间API((二)JSR-310:常用的日期时间API)(JAVA 小虚竹)高级JAVA开发必备技能:java8 新日期时间API((二)JSR-310:常用的日期时间API)(JAVA 小虚竹)高级JAVA开发必备技能:java8 新日期时间API((二)JSR-310:常用的日期时间API)(JAVA 小虚竹)高级JAVA开发必备技能:java8 新日期时间API((二)JSR-310:常用的日期时间API)(JAVA 小虚竹)高级JAVA开发必备技能:java8 新日期时间API((二)JSR-310:常用的日期时间API)(JAVA 小虚竹)高级JAVA开发必备技能:java8 新日期时间API((二)JSR-310:常用的日期时间API)(JAVA 小虚竹)

        Clock tickClock = Clock.tick(Clock.systemDefaultZone(),Duration.ofHours(1L));       
        Clock tickMinutes = Clock.tickMinutes(ZoneId.of("Asia/Shanghai"));      
        Clock tickSeconds = Clock.tickSeconds(ZoneId.of("Asia/Shanghai"));      
        LocalDateTime tickClockLocalDateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(tickClock.millis()),ZoneId.of("Asia/Shanghai"));        
        LocalDateTime tickMinutesLocalDateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(tickMinutes.millis()),ZoneId.of("Asia/Shanghai"));        
        LocalDateTime tickSecondsLocalDateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(tickSeconds.millis()),ZoneId.of("Asia/Shanghai"));        
        System.out.println("tickClock  :"+tickClock.millis() +" 转为date时间:"+tickClockLocalDateTime); 
        System.out.println("tickMinutes:"+tickMinutes.millis() +" 转为date时间:"+tickMinutesLocalDateTime); 
        System.out.println("tickSeconds:"+tickSeconds.millis() +" 转为date时间:"+tickSecondsLocalDateTime);

高级JAVA开发必备技能:java8 新日期时间API((二)JSR-310:常用的日期时间API)(JAVA 小虚竹)高级JAVA开发必备技能:java8 新日期时间API((二)JSR-310:常用的日期时间API)(JAVA 小虚竹)高级JAVA开发必备技能:java8 新日期时间API((二)JSR-310:常用的日期时间API)(JAVA 小虚竹)高级JAVA开发必备技能:java8 新日期时间API((二)JSR-310:常用的日期时间API)(JAVA 小虚竹)高级JAVA开发必备技能:java8 新日期时间API((二)JSR-310:常用的日期时间API)(JAVA 小虚竹)高级JAVA开发必备技能:java8 新日期时间API((二)JSR-310:常用的日期时间API)(JAVA 小虚竹)高级JAVA开发必备技能:java8 新日期时间API((二)JSR-310:常用的日期时间API)(JAVA 小虚竹)

        LocalDateTime currentTime = LocalDateTime.now(); // 当前日期和时间
        System.out.println("------------------时间的加减法及修改-----------------------");
        //3.LocalDateTime的加减法包含了LocalDate和LocalTime的所有加减,上面说过,这里就只做简单介绍
        System.out.println("3.当前时间:" + currentTime);
        System.out.println("3.当前时间加5年:" + currentTime.plusYears(5));
        System.out.println("3.当前时间加2个月:" + currentTime.plusMonths(2));
        System.out.println("3.当前时间减2天:" + currentTime.minusDays(2));
        System.out.println("3.当前时间减5个小时:" + currentTime.minusHours(5));
        System.out.println("3.当前时间加5分钟:" + currentTime.plusMinutes(5));
        System.out.println("3.当前时间加20秒:" + currentTime.plusSeconds(20));
        //还可以灵活运用比如:向后加一年,向前减一天,向后加2个小时,向前减5分钟,可以进行连写
        System.out.println("3.同时修改(向后加一年,向前减一天,向后加2个小时,向前减5分钟):" + currentTime.plusYears(1).minusDays(1).plusHours(2).minusMinutes(5));
        System.out.println("3.修改年为2025年:" + currentTime.withYear(2025));
        System.out.println("3.修改月为12月:" + currentTime.withMonth(12));
        System.out.println("3.修改日为27日:" + currentTime.withDayOfMonth(27));
        System.out.println("3.修改小时为12:" + currentTime.withHour(12));
        System.out.println("3.修改分钟为12:" + currentTime.withMinute(12));
        System.out.println("3.修改秒为12:" + currentTime.withSecond(12));

高级JAVA开发必备技能:java8 新日期时间API((二)JSR-310:常用的日期时间API)(JAVA 小虚竹)

        System.out.println("------------------方法一:分步写-----------------------");
        //实例化一个时间对象
        Date date = new Date();
        //返回表示时间轴上同一点的瞬间作为日期对象
        Instant instant = date.toInstant();
        //获取系统默认时区
        ZoneId zoneId = ZoneId.systemDefault();
        //根据时区获取带时区的日期和时间
        ZonedDateTime zonedDateTime = instant.atZone(zoneId);
        //转化为LocalDateTime
        LocalDateTime localDateTime = zonedDateTime.toLocalDateTime();
        System.out.println("方法一:原Date = " + date);
        System.out.println("方法一:转化后的LocalDateTime = " + localDateTime);

        System.out.println("------------------方法二:一步到位(推荐使用)-----------------------");
        //实例化一个时间对象
        Date todayDate = new Date();
        //Instant.ofEpochMilli(long l)使用1970-01-01T00:00:00Z的纪元中的毫秒来获取Instant的实例
        LocalDateTime ldt = Instant.ofEpochMilli(todayDate.getTime()).atZone(ZoneId.systemDefault()).toLocalDateTime();
        System.out.println("方法二:原Date = " + todayDate);
        System.out.println("方法二:转化后的LocalDateTime = " + ldt);

高级JAVA开发必备技能:java8 新日期时间API((二)JSR-310:常用的日期时间API)(JAVA 小虚竹)高级JAVA开发必备技能:java8 新日期时间API((二)JSR-310:常用的日期时间API)(JAVA 小虚竹)高级JAVA开发必备技能:java8 新日期时间API((二)JSR-310:常用的日期时间API)(JAVA 小虚竹)高级JAVA开发必备技能:java8 新日期时间API((二)JSR-310:常用的日期时间API)(JAVA 小虚竹)高级JAVA开发必备技能:java8 新日期时间API((二)JSR-310:常用的日期时间API)(JAVA 小虚竹)高级JAVA开发必备技能:java8 新日期时间API((二)JSR-310:常用的日期时间API)(JAVA 小虚竹)高级JAVA开发必备技能:java8 新日期时间API((二)JSR-310:常用的日期时间API)(JAVA 小虚竹)高级JAVA开发必备技能:java8 新日期时间API((二)JSR-310:常用的日期时间API)(JAVA 小虚竹)高级JAVA开发必备技能:java8 新日期时间API((二)JSR-310:常用的日期时间API)(JAVA 小虚竹)高级JAVA开发必备技能:java8 新日期时间API((二)JSR-310:常用的日期时间API)(JAVA 小虚竹)高级JAVA开发必备技能:java8 新日期时间API((二)JSR-310:常用的日期时间API)(JAVA 小虚竹)高级JAVA开发必备技能:java8 新日期时间API((二)JSR-310:常用的日期时间API)(JAVA 小虚竹)高级JAVA开发必备技能:java8 新日期时间API((二)JSR-310:常用的日期时间API)(JAVA 小虚竹)高级JAVA开发必备技能:java8 新日期时间API((二)JSR-310:常用的日期时间API)(JAVA 小虚竹)上面的例子说明了,LocalDateTime是可以转成ZonedDateTime的。


推荐相关文章

hutool日期时间系列文章

1DateUtil(时间工具类)-当前时间和当前时间戳


2DateUtil(时间工具类)-常用的时间类型Date,DateTime,Calendar和TemporalAccessor(LocalDateTime)转换


3DateUtil(时间工具类)-获取日期的各种内容


4DateUtil(时间工具类)-格式化时间


5DateUtil(时间工具类)-解析被格式化的时间


6DateUtil(时间工具类)-时间偏移量获取


7DateUtil(时间工具类)-日期计算


8ChineseDate(农历日期工具类)


9LocalDateTimeUtil(JDK8+中的{@link LocalDateTime} 工具类封装)


10TemporalAccessorUtil{@link TemporalAccessor} 工具类封装


其他

要探索JDK的核心底层源码,那必须掌握native用法


万字博文教你搞懂java源码的日期和时间相关用法


java的SimpleDateFormat线程不安全出问题了,虚竹教你多种解决方案


源码分析:JDK获取默认时区的风险和最佳实践


上一篇:hive操作create,alter等


下一篇:UVa 10520【递推 搜索】