【java8中的时间操作】java8中获取月的最后一天或者总天数,JDK8 LocalDate API

缘起

前面有个需求,获取当前月和前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
【java8中的时间操作】java8中获取月的最后一天或者总天数,JDK8 LocalDate API_第1张图片

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.替换

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

	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 API_第2张图片
这个类可以获取第一天第一年最后一天最后一年等信息

你可能感兴趣的:(Java)