通过Java日期时间API系列8-----Jdk8中java.time包中的新的日期时间API类的LocalDate源码分析中可以看出,java8中的方法特别丰富,一些常用的计算如星期计算,闰年计算等等。

下面是应用代码:

    /**
* 获取星期值 1-7,星期一到星期日
* @param date
* @return
*/
public static int getDayOfWeek(Date date){
return DateTimeConverterUtil.toLocalDateTime(date).getDayOfWeek().getValue();
} /**
* 获取星期值 1-7,星期一到星期日
* @param localDateTime
* @return
*/
public static int getDayOfWeek(LocalDateTime localDateTime){
Objects.requireNonNull(localDateTime, "localDateTime");
return localDateTime.getDayOfWeek().getValue();
} /**
* 获取星期值 1-7,星期一到星期日
* @param instant
* @return
*/
public static int getDayOfWeek(Instant instant){
return DateTimeConverterUtil.toLocalDateTime(instant).getDayOfWeek().getValue();
} /**
* 获取星期值当前月的最后一天
* @param localDate
* @return
*/
public static LocalDate lastDayOfMonth(LocalDate localDate){
Objects.requireNonNull(localDate, "localDate");
return localDate.with(TemporalAdjusters.lastDayOfMonth());
} /**
* 获取星期值当前月的最后一天
* @param localDateTime
* @return
*/
public static LocalDateTime lastDayOfMonth(LocalDateTime localDateTime){
Objects.requireNonNull(localDateTime, "localDateTime");
return localDateTime.with(TemporalAdjusters.lastDayOfMonth());
} /**
* 获取星期值当前月的最后一天
* @param date
* @return
*/
public static Date lastDayOfMonth(Date date){
return DateTimeConverterUtil.toDate(DateTimeConverterUtil.toLocalDate(date).with(TemporalAdjusters.lastDayOfMonth()));
} /**
* 判断是否闰年
* @param localDate
* @return
*/
public static boolean isLeapYear(LocalDate localDate){
Objects.requireNonNull(localDate, "localDate");
return localDate.isLeapYear();
} /**
* 判断是否闰年
* @param localDateTime
* @return
*/
public static boolean isLeapYear(LocalDateTime localDateTime){
Objects.requireNonNull(localDateTime, "localDateTime");
return localDateTime.toLocalDate().isLeapYear();
} /**
* 判断是否闰年
* @param date
* @return
*/
public static boolean isLeapYear(Date date){
return DateTimeConverterUtil.toLocalDateTime(date).toLocalDate().isLeapYear();
} /**
* 获取月的天数
* @param localDate
* @return
*/
public static int lengthOfMonth(LocalDate localDate){
Objects.requireNonNull(localDate, "localDate");
return localDate.lengthOfMonth();
} /**
* 获取月的天数
* @param localDateTime
* @return
*/
public static int lengthOfMonth(LocalDateTime localDateTime){
Objects.requireNonNull(localDateTime, "localDateTime");
return localDateTime.toLocalDate().lengthOfMonth();
} /**
* 获取月的天数
* @param date
* @return
*/
public static int lengthOfMonth(Date date){
return DateTimeConverterUtil.toLocalDateTime(date).toLocalDate().lengthOfMonth();
} /**
* 获取年的天数
* @param localDate
* @return
*/
public static int lengthOfYear(LocalDate localDate){
Objects.requireNonNull(localDate, "localDate");
return localDate.lengthOfYear();
} /**
* 获取年的天数
* @param localDateTime
* @return
*/
public static int lengthOfYear(LocalDateTime localDateTime){
Objects.requireNonNull(localDateTime, "localDateTime");
return localDateTime.toLocalDate().lengthOfYear();
} /**
* 获取年的天数
* @param date
* @return
*/
public static int lengthOfYear(Date date){
return DateTimeConverterUtil.toLocalDateTime(date).toLocalDate().lengthOfYear();
} /**
* 下一个星期几
* @param localDate
* @param dayOfWeek
* @return
*/
public static LocalDate next(LocalDate localDate, DayOfWeek dayOfWeek){
Objects.requireNonNull(localDate, "localDate");
return localDate.with(TemporalAdjusters.next(dayOfWeek));
} /**
* 下一个星期几
* @param localDateTime
* @param dayOfWeek
* @return
*/
public static LocalDateTime next(LocalDateTime localDateTime, DayOfWeek dayOfWeek){
return localDateTime.with(TemporalAdjusters.next(dayOfWeek));
} /**
* 下一个星期几
* @param date
* @param dayOfWeek
* @return
*/
public static Date next(Date date, DayOfWeek dayOfWeek){
return DateTimeConverterUtil.toDate(DateTimeConverterUtil.toLocalDate(date).with(TemporalAdjusters.next(dayOfWeek)));
} /**
* 上一个星期几
* @param localDate
* @param dayOfWeek
* @return
*/
public static LocalDate previous(LocalDate localDate, DayOfWeek dayOfWeek){
Objects.requireNonNull(localDate, "localDate");
return localDate.with(TemporalAdjusters.previous(dayOfWeek));
} /**
* 上一个星期几
* @param localDateTime
* @param dayOfWeek
* @return
*/
public static LocalDateTime previous(LocalDateTime localDateTime, DayOfWeek dayOfWeek){
return localDateTime.with(TemporalAdjusters.previous(dayOfWeek));
} /**
* 上一个星期几
* @param date
* @param dayOfWeek
* @return
*/
public static Date previous(Date date, DayOfWeek dayOfWeek){
return DateTimeConverterUtil.toDate(DateTimeConverterUtil.toLocalDate(date).with(TemporalAdjusters.previous(dayOfWeek)));
} /**
* 获下一个工作日
* @param localDate
* @return
*/
public static LocalDate nextWorkDay(LocalDate localDate){
Objects.requireNonNull(localDate, "localDate");
return localDate.with(TemporalAdjusterExtension.nextWorkDay());
} /**
* 获下一个工作日
* @param localDateTime
* @return
*/
public static LocalDateTime nextWorkDay(LocalDateTime localDateTime){
Objects.requireNonNull(localDateTime, "localDateTime");
return localDateTime.with(TemporalAdjusterExtension.nextWorkDay());
} /**
* 获下一个工作日
* @param date
* @return
*/
public static Date nextWorkDay(Date date){
return DateTimeConverterUtil.toDate(DateTimeConverterUtil.toLocalDate(date).with(TemporalAdjusterExtension.nextWorkDay()));
}

测试代码:

    /**
* Date其他常用计算
*/
@Test
public void dateCalculatorOtherTest(){
Date date = new Date();
System.out.println(date);
System.out.println(DateTimeConverterUtil.toLocalDateTime(date));
//获取星期值
System.out.println(DateTimeCalculatorUtil.getDayOfWeek(date));
//获取星期值当前月的最后一天
System.out.println(DateTimeCalculatorUtil.lastDayOfMonth(date));
//判断是否闰年
System.out.println(DateTimeCalculatorUtil.isLeapYear(date));
//获取月的天数
System.out.println(DateTimeCalculatorUtil.lengthOfMonth(date));
//获取月的天数
System.out.println(DateTimeCalculatorUtil.lengthOfYear(date));
//下一个星期一
System.out.println(DateTimeCalculatorUtil.next(date, DayOfWeek.MONDAY));
//上一个星期一
System.out.println(DateTimeCalculatorUtil.previous(date, DayOfWeek.MONDAY));
//获下一个工作日
System.out.println(DateTimeCalculatorUtil.nextWorkDay(date));
} /**
* LocalDateTime其他常用计算
*/
@Test
public void dateCalculatorOtherTest2(){
LocalDateTime ldt = LocalDateTime.now();
System.out.println(ldt); //获取星期值
System.out.println(DateTimeCalculatorUtil.getDayOfWeek(ldt));
//获取星期值当前月的最后一天
System.out.println(DateTimeCalculatorUtil.lastDayOfMonth(ldt));
//判断是否闰年
System.out.println(DateTimeCalculatorUtil.isLeapYear(ldt));
//获取月的天数
System.out.println(DateTimeCalculatorUtil.lengthOfMonth(ldt));
//获取月的天数
System.out.println(DateTimeCalculatorUtil.lengthOfYear(ldt));
//下一个星期一
System.out.println(DateTimeCalculatorUtil.next(ldt, DayOfWeek.MONDAY));
//上一个星期一
System.out.println(DateTimeCalculatorUtil.previous(ldt, DayOfWeek.MONDAY));
//获下一个工作日
System.out.println(DateTimeCalculatorUtil.nextWorkDay(ldt));
}

测试结果:

Fri Feb 07 18:34:40 CST 2020
2020-02-07T18:34:40.887
5
Sat Feb 29 00:00:00 CST 2020
true
29
366
Mon Feb 10 00:00:00 CST 2020
Mon Feb 03 00:00:00 CST 2020
Mon Feb 10 00:00:00 CST 2020 2020-02-07T18:34:56.421
5
2020-02-29T18:34:56.421
true
29
366
2020-02-10T18:34:56.421
2020-02-03T18:34:56.421
2020-02-10T18:34:56.421

源代码地址:https://github.com/xkzhangsan/xk-time

Java日期时间API系列18-----Jdk8中java.time包中的新的日期时间API类,java日期计算5,其他常用日期计算,星期计算,闰年计算等的更多相关文章

  1. 在swt中获取jar包中的文件 uri is not hierarchical

    uri is not hierarchical 学习了:http://blog.csdn.net/zdsdiablo/article/details/1519719 在swt中获取jar包中的文件: ...

  2. API接口自动化之3 同一个war包中多个接口做自动化测试

    同一个war包中多个接口做自动化测试 一个接口用一个测试类,每个测试用例如下,比如下面是4个测试用例,每个详细的测试用例中含有请求入参,返回体校验,以此来判断每条测试用例是否通过 一个war包中,若含 ...

  3. Andriod项目开发实战(1)——如何在Eclipse中的一个包下建新包

    最开始是想将各个类分门别类地存放在不同的包中,所以想在项目源码包中新建几个不同功能的包eg:utils.model.receiver等,最后的结果应该是下图左边这样的:   很明显建立项目后的架构是上 ...

  4. Mac 如何导出ipa文件中Assets.car包中的切图

    在之前 获取 AppStore 中 应用 的 IPA 包文件(Mac OS 13+)中获取到应用的 IPA 包,可以取出应用的部分图片(如 Logo),如果项目工程中把图片添加到 Assets.xca ...

  5. JDK中的Atomic包中的类及使用

    引言 Java从JDK1.5开始提供了java.util.concurrent.atomic包,方便程序员在多线程环境下,无锁的进行原子操作.原子变量的底层使用了处理器提供的原子指令,但是不同的CPU ...

  6. 【转】Eclipse中查看jar包中的源码

    (简单的方式:通过jd-gui来进行反编译,最简单!,参考我的另一篇博文, 地址:http://www.cnblogs.com/gmq-sh/p/4277991.html) Java Decompil ...

  7. Package.json中dependencies依赖包中^符号和~符号前缀的区别

    刚git了webpack的包发现package.json里面dependencies依赖包的版本号前面的符号有两种,一种是~,一种是^,如下图标记: 然后搜了下在stackoverflow上找到一个比 ...

  8. Java中常见的包

    目录 JDK自带的包 第三方包 JDK自带的包 JAVA提供了强大的应用程序接口,既JAVA类库.他包含大量已经设计好的工具类,帮助程序员进行字符串处理.绘图.数学计算和网络应用等方面的工作.下面简单 ...

  9. Redis总结(五)缓存雪崩和缓存穿透等问题 Web API系列(三)统一异常处理 C#总结(一)AutoResetEvent的使用介绍(用AutoResetEvent实现同步) C#总结(二)事件Event 介绍总结 C#总结(三)DataGridView增加全选列 Web API系列(二)接口安全和参数校验 RabbitMQ学习系列(六): RabbitMQ 高可用集群

    Redis总结(五)缓存雪崩和缓存穿透等问题   前面讲过一些redis 缓存的使用和数据持久化.感兴趣的朋友可以看看之前的文章,http://www.cnblogs.com/zhangweizhon ...

  10. Web API系列(三)统一异常处理

    前面讲了webapi的安全验证和参数安全,不清楚的朋友,可以看看前面的文章,<Web API系列(二)接口安全和参数校验>,本文主要介绍Web API异常结果的处理.作为内部或者是对外提供 ...

随机推荐

  1. 【ActiveJdbc】05

    一.事务 通常在 Java ORM 中有一个显式连接或管理器对象(JPA 中的 EntityManager,Hibernate 中的 SessionManager 等). ActiveJDBC 中没有 ...

  2. 【转载】 Do's and Don'ts of using t-SNE to Understand Vision Models —— t-SNE 作者写的使用指南(PPT版本)

    <Do's and Don'ts of using t-SNE to Understand Vision Models> 作者的PPT视频:https://www.youtube.com/ ...

  3. python绘图库matplotlib:刻度线的方向调整, in, out, inout

    前文相关: python绘图库matplotlib:画线的标志marker的设置--类型/size/空心/边线颜色及大小/显示marker超出边界部分 由于工作需要经常用matplotlib来绘图,但 ...

  4. 【VMware ESXi】把硬盘当内存用?VMware 内存分层(Memory Tiering),你值得拥有!

    VMware vSphere 8.0 U3 发布了一个非常有意义的功能叫内存分层(Memory Tiering),以利用基于 PCIe 的 NVMe 设备充当第二层(辅助)内存,从而使 ESXi 主机 ...

  5. MySQL 5.7 DDL 与 GH-OST 对比分析

    作者:来自 vivo 互联网存储研发团队- Xia Qianyong 本文首先介绍MySQL 5.7 DDL以及GH-OST的原理,然后从效率.空间占用.锁阻塞.binlog日志产生量.主备延时等方面 ...

  6. Perforce常用命令

    Perforce tirgger trig1 change-submit //depot/... "trig.pl %changelist%" trig1 change-submi ...

  7. SMU Summer 2023 Contest Round 5

    SMU Summer 2023 Contest Round 5 A. Points in Segments \(\mathcal{O}(n \times m)\) 做法数据范围小,直接把每次的\(l ...

  8. this 之谜揭底:从浅入深理解 JavaScript 中的 this 关键字(二)

    前言 系列首发于公众号『前端进阶圈』 ,若不想错过更多精彩内容,请"星标"一下,敬请关注公众号最新消息. this 之谜揭底:从浅入深理解 JavaScript 中的 this 关 ...

  9. 【CMake系列】10-cmake测试集成googletest与第三方库自动化构建

    cmake测试,使用ctest 可能不能满足我们的需求,需要我们使用更为强大的第三方测试框架,如googletest,完成项目中的测试工作 本篇文章将第三方测试框架 googletest,引入,同时也 ...

  10. Ubuntu 设置 FTP 服务

    安装 VSFTP 服务 sudo apt install vsftpd 检查配置文件 sudo vim /etc/vsftpd.conf 确保以下配置项正确: #禁止匿名访问 anonymous_en ...