缘起

前面有个需求,获取当前月和前5个月的最后一天,网上找了一下基本都是jdk7以前的,但实际上jdk8中有更简单的获取方式。

public static void main(String[] args) {for (int i = 0;i<6;i++){LocalDate today = LocalDate.now().minusMonths(i);//本月的第一天LocalDate firstday = LocalDate.of(today.getYear(),today.getMonth(),1);//本月的最后一天LocalDate lastDay =today.with(TemporalAdjusters.lastDayOfMonth());System.out.println(firstday.getMonth().getValue()+"月");System.out.println("最后一天:"+lastDay.getDayOfMonth());System.out.println("-------------------");}
}

输出

2月
最后一天:28

1月
最后一天:31

12月
最后一天:31

11月
最后一天:30

10月
最后一天:31

9月
最后一天:30

其中minusMonths(n)为获取当前时间的前N个月,对应的还有获取前N天前N年等方法。下面列出一份完整的API

LocalDateAPI

获取LocalDate

1.获取当前的日期 LocalDate

LocalDate now = LocalDate.now();

2.根据年月日的值获取 LocalDate

LocalDate.of(2016, 11, 30);

3.根据某年的第n天获取 LocalDate

LocalDate.ofYearDay(2016, 300)

4.从时间纪元(1970年1月1日)开始第n天(负数表示在时间纪元前n天)获取 LocalDate

LocalDate.ofEpochDay(365);

操作LocalDate

LocalDate.now().getYear(); // 年份
LocalDate.now().getMonthValue(); // 月份(数值表示, 从1开始)
LocalDate.now().getMonth(); // 月份(英文[enum]表示)
LocalDate.now().getDayOfMonth(); // 日期(从1开始)
LocalDate.now().getDayOfYear(): // 当天所在这一年的第几天(从1开始)
LocalDate.now().getDayOfWeek(); // 星期几
LocalDate.now().lengthOfYear(); // 当年的天数
LocalDate.now().lengthOfMonth(); //当月的天数
LocalDate.now().toEpochDay(); // 与时间纪元(1970年1月1日)相差的天数,负数表示在时间纪元之前多少天

LocalDate运算

可以对年、月、日、周进行加减法运算:
如果加(或减)日期超过当月的最大天数(或小于等于0)则月份对应增加(或减少);
如果加(或减)月份超过12(或小于等于0)则年份对应增加(或减少);
加减周数其实是对日期(天数)的加减;

1.加法

System.out.println(“加法运算”);
System.out.println(“当前:” + LocalDate.now());
System.out.println(“加1天:” + LocalDate.now().plusDays(1));
System.out.println(“加1周:” + LocalDate.now().plusWeeks(1));
System.out.println(“加1月:” + LocalDate.now().plusMonths(1));
System.out.println(“加1年:” + LocalDate.now().plusYears(1));

2.减法

System.out.println(“减法运算”);
System.out.println(“当前:” + LocalDate.now());
System.out.println(“减1天:” + LocalDate.now().minusDays(1));
System.out.println(“减1周:” + LocalDate.now().minusWeeks(1));
System.out.println(“减1月:” + LocalDate.now().minusMonths(1));
System.out.println(“减1年:” + LocalDate.now().minusYears(1));

3.替换

所有的数值必须合法;
如果当月当天是闰年2月29日,替换年份为非闰年,则会变成2月28日;

System.out.println("当前:" + LocalDate.now());
System.out.println("替换日期为1:" + LocalDate.now().withDayOfMonth(1));
System.out.println("替换天数为1:" + LocalDate.now().withDayOfYear(1));
System.out.println("替换月份为1:" + LocalDate.now().withMonth(1));
System.out.println("替换年份为1:" + LocalDate.now().withYear(1));

LocalDate判断

可以对两个 LocalDate 进行比较,可以判断一个日期是否在另一个日期之前或之后,或者判断两个日期是否是同年同月同日。

System.out.println(“当天:” + LocalDate.now());
System.out.println(“是否在当天之前:” + LocalDate.now().minusDays(1).isBefore(LocalDate.now()));
System.out.println(“是否在当天之后:” + LocalDate.now().plusDays(1).isAfter(LocalDate.now()));
System.out.println(“是否在当天:” + LocalDate.now().isEqual(LocalDate.now()));
System.out.println(“今年是否是闰年:” + LocalDate.now().isLeapYear());

LocalDate转换

可以把LocalDate转换自己想要的格式

localDate.format(DateTimeFormatter.ofPattern(“yyyy-MM-dd HH:mm:ss”));

TemporalAdjusters

这个类可以获取第一天第一年最后一天最后一年等信息

【java8中的时间操作】java8中获取月的最后一天或者总天数,JDK8 LocalDate AP相关推荐

  1. java时间设置_JAVA中的时间操作

    java中的时间操作不外乎这四种情况: 1.获取当前时间 2.获取某个时间的某种格式 3.设置时间 4.时间的运算 好,下面就针对这四种情况,一个一个搞定. 一.获取当前时间 有两种方式可以获得,第一 ...

  2. python中csv文件操作_python中操作csv文件

    python中操作csv文件 读取csv improt csv f = csv.reader(open("文件路径","r")) for i in f: pri ...

  3. 在linux中的vi中的删除操作,linux中vi和vim操作

    一.简单介绍 vi 和 vim 类似于windows的文本编辑器 所有的Linux系统都会内置vi文本编辑器 vim可以看做是vi增强版,具有程序编辑能力,支持语法高亮,代码补全,编译及错误跳转等功能 ...

  4. js获取一个月份最大天数和获取月的最后一天

    代码如下: <html xmlns=http://www.w3.org/1999/xhtml >     <head>     <title>标题页</tit ...

  5. Oracle中获取文件中的数据,操作oracle中的数据文件

    收藏于http://dev.yesky.com/296/8090796.shtml Oracle数据库 中管理表空间和数据文件 数据库的三大组成部分:数据文件,控制文件,Redo日志. 表空间分为系统 ...

  6. java datediff_JAVA中的时间操作(附DATEDIFF函数用法)

    http://blog.csdn.net/lujiancs/article/details/7043760 //字符串转化成时间类型(字符串可以是任意类型,只要和SimpleDateFormat中的格 ...

  7. mysql中所有时间类型_MySQL 中的日期时间类型

    INSERT INTO todo (title,created_on) VALUES ('blah','2019-09-31'); ERROR 1292 (22007): Incorrect date ...

  8. oracle中数据文件创建,操作oracle中的数据文件

    收藏于http://dev.yesky.com/296/8090796.shtml Oracle数据库 中管理表空间和数据文件 数据库的三大组成部分:数据文件,控制文件,Redo日志. 表空间分为系统 ...

  9. c语言中把时间拷到字符串中,C语言中将日期和时间以字符串格式输出的方法

    ctime()函数:头文件: #include 定义函数: char *ctime(const time_t *timep); 函数说明:ctime()将参数timep 所指的time_t 结构中的信 ...

最新文章

  1. oracle 提示:ORA-02292:integrity constraint(xxxxxxx) violated - child record found
  2. linux c 运行命令 popen 简介
  3. 生成sql 脚本没有索引
  4. tuxedo文件ubbconfig配置说明
  5. 服务器后还有一系列留后门,服务器留隐蔽后门
  6. 波士顿房价预测python决策树_机器学习·波士顿房价预测模型
  7. 我的矩阵分析学习安排
  8. 猫/路由器/网关/交换机的作用与区别
  9. 天堂2单机版服务器维护,天堂2芙蕾雅服务端单机版(l2jAngel-CT2.6芙蕾雅-34)
  10. 抖音快手直播如何快速粘粉涨粉,直播话术新人必备【干货】
  11. 计算机上怎么在表格输入分秒,excel2010中如何设置分秒格式显示单元格或数据?...
  12. 抖音短视频如何快速制作?抖音怎么赚钱?
  13. 分享关于网站跳出率需要控制在多少
  14. linux 谷歌浏览器设置代理_Linux系统下Firefox浏览器SSH代理服务器脚本及设置方法...
  15. 解决微信端无法使用window.open打开文件的问题
  16. PYTHON实现迅雷、FLASHGET、QQ旋风转真实链接、磁链转种子文件、迅雷快传链接抓取
  17. H5案例分享:html5移动开发细微之美
  18. 实现微信机器人开发,个微api
  19. 信息安全实训系统php源码,实训平台
  20. 离网型风力发电机与并网型风力发电机之间的区别

热门文章

  1. 使用 SQL Server Management Studio (SSMS) 连接 SQL Server实例
  2. spring boot多数据源配置(mysql,redis,mongodb)实战
  3. Linux 进程管理剖析--转
  4. anroid 图片处理加载对比(image loader,Picasso ,glide,fresco)
  5. 【项目实战】多场景下的图表可视化表达
  6. Error: ENOSPC: System limit for number of file watchers reached, watch'所在文件路径'
  7. Hyperledger Besu企业以太坊快速教程
  8. sensor曝光量和曝光行的区别_4个要点,告诉你拼多多新的产品怎么增加曝光量!...
  9. 三、【线性表】线性表概述
  10. jvm性能调优 - 17案例实战_每日上亿请求量的电商系统 老轻代垃圾回收参数如何优化