大家好,我是小虚竹。之前有粉丝私聊我,问能不能把JAVA8 新的日期时间API(JSR-310)知识点梳理出来。答案是肯定的,谁让我宠粉呢。由于内容偏多(超十万字了),会拆成多篇来写。
闲话就聊到这,请看下面的正文。
文章目录
常用于计算的类介绍
Duration
Duration类说明
Duration常用的用法
创建Duration对象
访问Duration的时间
Duration计算
Period
Period类说明
Period常用的用法
创建Period对象
访问Period的时间
Duration计算
TemporalUnit
TemporalUnit类说明
ChronoUnit常用的用法
TemporalField
TemporalField类说明
ChronoField常用的用法
ValueRange
ValueRange类说明
ValueRange常用的用法
Chronology 判断是否闰年
实战
比较日期时间的先后
比较-LocalDate
比较-LocalTime
比较-OffsetDateTime
比较-OffsetTime
比较-ZonedDateTime
计算日期时间的间隔
推荐相关文章
hutool日期时间系列文章
其他
常用于计算的类介绍
介绍下java8 中提供了几个常用于计算的类:
Duration:表示秒和纳秒的时间量
Period:表示年月日的时间量
TemporalUnit:日期时间的基本单位
TemporalField:日期时间的属性
ValueRange:表示取值范围
Duration
Duration类说明
包路径:java.time.Duration
这段代码用了两个条件,这两个条件都符合,才是闰年。
(prolepticYear & 3) == 0
(prolepticYear % 100) != 0 || (prolepticYear % 400) == 0
(prolepticYear & 3) == 0 用了与运算符“&”,其使用规律如下:
两个操作数中位都为1,结果才为1,否则结果为0。
3 的二进制是011 ,prolepticYear & 3 目的是保留最后2位二进制数,然后判断是否最后两位二进制数等于0。如果等于0,证明能被4整除。闰年一定要满足是4的倍数的条件;
(prolepticYear % 100) != 0 || (prolepticYear % 400) == 0 这个就比较好理解了,看是不是100的倍数或者是不是400 倍数。
而且小虚竹发现java.time.Year#isLeap() 用的实现代码逻辑是一样的计算日期时间的间隔
Duration 和**Period ** 都有 **between ** 方法
这个就不在重复说了,上面Duration 和Period 的常用用法里有介绍到。
推荐相关文章
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获取默认时区的风险和最佳实践
高级JAVA开发必备技能:时区的规则发生变化时,如何同步JDK的时区规则