JAVA时间存储类Period和Duration

前言

在JDK1.8中区分了时间和日期的概念,所以有了两个对应的类,LocalDate和LocalTime,区别如下

  • LocalDate表示日期,不会包含具体的时间,例如2022-09-26。

  • LocalTime表示时间,不会包含日期,仅仅包含时分秒。

简单使用如下

LocalDate localDate = LocalDate.now();
// 执行结果:2022-09-26
System.out.println(localDate);LocalTime localTime = LocalTime.now();
// 执行结果:16:17:12.381
System.out.println(localTime);

区分了时间和日期的概念后,为方便使用JDK1.8又推出了两个用于存储时间和日期的类,分别为Duraction和Period,这两个类的区别和LocalDate和LocalTime是一一对应的。

  • Period:表示日期的存储用于度量年月日,一般用于存储多个日期之间相差的日期值。

  • Duraction:表示时间的存储用于度量时分秒,一般用于存储多个时间之间相差的时间值。

Period类

Period可以应用于存储两个日期之间的日期差,存储年月日。

LocalDate localDate1 = LocalDate.of(2022,8,20);
LocalDate localDate2 = LocalDate.now();
// 计算两个日期之间的差值
Period between = Period.between(localDate1, localDate2);// 区间是否为0
System.out.println(between.isZero());
// 区间是否为负数
System.out.println(between.isNegative());// 获取区间相差几年、几月、几日
System.out.println(between.getYears());
System.out.println(between.getMonths());
System.out.println(between.getDays());// 区间相差的总月份
System.out.println(between.toTotalMonths());

除了主要场景外还提供一些其它API

实例化

// Period对象实例化可以直接调用of方法指定年月日,注意Period只做日期存储所以不会校验年月日是否符合日期规范!!!
Period period = Period.of(2022, 20, 5);// 所以当我们想取正常日期值时可以调用normalized方法转换
Period period1 = Period.of(2022, 19, 9);
// 展示结果:2022==19
System.out.println(period1.getYears()+"=="+period1.getMonths());Period period2 = period1.normalized();
// 展示结果:2023==7
System.out.println(period2.getYears()+"=="+period2.getMonths());

设置值

Period period1 = Period.of(2022, 19, 9);
// 值为:9
System.out.println(period1.getDays());
// 修改天数值,不会修改年月
Period period2 = period1.withDays(2);
// 值为:2
System.out.println(period2.getDays());//=================================================
// plus相加,minus相减
Period period3 = period1.plusDays(2);
// 值为:11
System.out.println(period3.getDays());

年月日都可以用with、plus、minus相关API设置值~

其它API

Period period1 = Period.of(2022, 19, 9);LocalDate localDate = LocalDate.of(2022,1,2);// 给指定日期加上Period对象存储的日期
Temporal temporal = period1.addTo(localDate);
// 返回结果:4045-08-11(日期对象)
System.out.println(temporal);Period period2 = Period.of(1, 1, 2);// 给指定日期减去Period对象存储的日期
LocalDate localDate1 = LocalDate.of(2022,1,2);
// 返回结果:2020-11-30(日期对象)
System.out.println(period2.subtractFrom(localDate1));

Duraction类

Duraction可以应用于存储两个时间之间的时间差,可以存储时分秒。

LocalTime localTime1 = LocalTime.of(10,1,2);
LocalTime localTime2 = LocalTime.now();// 得出时间区间间隔的时间差
Duration between = Duration.between(localTime1, localTime2);// 区间相差天数
System.out.println(between.toDays());
// 区间相差小时
System.out.println(between.toHours());
// 区间相差分钟
System.out.println(between.toMinutes());
// 区间中的秒数
System.out.println(between.getSeconds());
// 区间相差毫秒
System.out.println(between.toMillis());
// 区间相差纳秒
System.out.println(between.toNanos());System.out.println("======================");Duration duration = Duration.ZERO;
// 区间是否为0
System.out.println(duration.isZero());
// 区间是否为负
System.out.println(between.isNegative());

其它API

Duration duration = Duration.ofSeconds(10);
// 值为:10
System.out.println(duration.getSeconds());
// 值取反
Duration duration1 = duration.negated();
// 值为:-10
System.out.println(duration1.getSeconds());// 值除上指定值,得商
Duration duration2 = duration.dividedBy(2);
// 值为:5
System.out.println(duration2.getSeconds());// 取绝对值
Duration duration3 = Duration.ofSeconds(-9).abs();
// 值为:9
System.out.println(duration3.getSeconds());

Duration对象同样有minus、plus、with相关方法,使用方法可以参考Period对象使用。

JAVA时间存储类Period和Duration相关推荐

  1. Java时间工具类(把日期时间转换成xx秒前、xx分钟前、xx小时前...)

    Java时间工具类(把日期时间转换成xx秒前.xx分钟前.xx小时前...) package com.liuzy.javaopen.entity; import java.text.ParseExce ...

  2. Java时间操作工具类

    为什么80%的码农都做不了架构师?>>>    package com.hh.util;import java.text.ParseException; import java.te ...

  3. Java时间工具类(获取上个月、获取月份1月1号时间戳、获取月份最后一天时间戳...)

    在开发中我们经常还会用到日期时间,以下是一个日期时间工具类,包含: 获取每月月初时间戳 获取每月15号时间戳 获取每月月末时间戳 获取当前被格式化后的日期 从这些方法中你可以改写出你需要的方法 PS: ...

  4. Java时间工具类,获取日、周、旬、月、季度、半年、年等时间周期

    时间周期工具类,记录在这里方便以后使用,有需要的可以看看. 工具类如下: import java.text.ParseException; import java.text.SimpleDateFor ...

  5. Java 时间, 日历类详解

    1. Java时间戳 在最早出现的 UNIX 操作系统考虑到计算机产生的年代和应用的时限,把1970年1月1日0点定义为时间纪元,这种定义时间的方式在计算机语言中广泛存在,Java就是其中之一.之所以 ...

  6. Java时间日期类处理(LocalDateTime、LocalDate相关操作、获取周几、工作日休息日节假日判定)

    1.LocalDateTime相关操作:(时间推移.计算两个LocalDateTime之间的时间间隔.转LocalDate),代码如下: // 获取LocalDateTime对象String date ...

  7. Java时间处理类SimpleDateFormat的parse和format方法的正确使用

    Java中怎么才能把日期转换成想要的格式呢,或把字符串转换成一定格式的日期,如把数据库中的日期或时间转换成自己想要的格式,JAVA中提供了SimpleDateFormat类可以实现. SimpleDa ...

  8. java dateutils_Java DateUtils java时间工具类 kaki的博客

    import java.text.SimpleDateFormat; import java.util.*;java /** * 日期操做工具类 */ public class DateUtils { ...

  9. java时间日期类(Date、DateFormat、Calendar)学习

    1.Date类 常用方法:long getTime(),用于返回当前时刻的毫秒值 Date d = new Date(2000); System.out.println(d.getTime());// ...

最新文章

  1. 【青少年编程】【一级】小镇一日游
  2. ICCV 2021 | 最新开源!多视角几何和注意力机制实现新视角合成
  3. python 培训-Python培训
  4. java和node.js 2018_2018,Node.js社区最值得关注的三个话题
  5. 笔记本多硬盘win7下U盘安装Cnetos7引导问题!
  6. TCP 三次握手原理,你真的理解吗
  7. linux 软件 名称 更新,linux软件版本管理命令update-alternatives使用详解
  8. 数据库(4)——候选码和主键
  9. android 4.0 蓝牙分析之二
  10. Context Menu控件
  11. jieba 结巴结巴结巴
  12. 使用LR11过程中遇到的一些问题汇总
  13. 上海域格ASR平台4g模块低功耗应用指导
  14. 数据时代,大数据未来的发展趋势主要有哪些?
  15. 腾讯企业邮箱申请注册注意事项
  16. 从头学习爬虫(十六)进阶篇----第三方接口
  17. linux_如何在Linux上配置基于Web的网络流量监控系统
  18. 创建型——单例模式(Singleton)总结
  19. 交换机的背板容量、交换容量和包转发能力
  20. Latex 绘制函数图像

热门文章

  1. Scala:函数与匿名函数
  2. label标签的属性
  3. Unreal Open Day 2017 参会总结——ACT(动作)游戏制作经验分享
  4. CSDN大神多,在这里驻扎一下,沾沾神气
  5. 价值180的仿3641美nv图库帝国CMS内核整站源码
  6. python3 scrapy爬取智联招聘存mongodb
  7. DataGridView控件页脚会总行的最佳实现。
  8. 成绩管理系统课程设计
  9. 爬取起点中文网的小说
  10. 严格递增和非严格递增最长递增子序列长度