JDK8, LocalDate求取一整月的日期。

       JDK8中新增了很多时间类、日期类、时间日期类用于处理时间、日期。有兴趣的小伙伴可以看《JDK8实战》这本书,希望对各位有帮助。

 

       本篇博客主要想各位讲述如何使用LocalDate类获取一整月的日期。我们知道,年分闰年、平年,月分大月、小月。闰年2月有29天,平年2月有28天,按照传统的JDK去处理日期,写起来非常的麻烦!JDK8帮我们很好的解决了这个问题。

 

代码如下:

package com.date;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAdjusters;
import java.util.ArrayList;
import java.util.List;

public class MonthDays {
	
	public static void main(String[] args) {
		
		test01();
		System.out.println("---------------------- 分割线1 ----------------------");
		getMonthDays(201902);
		System.out.println("---------------------- 分割线2 ----------------------");
		getMonthDays(202002);
		System.out.println("---------------------- 分割线3 ----------------------");
		getMonthDays(201903);
		
	}
	
	
	
	/**
	 * 获取每月的所有日期,日期格式为:yyyyMMdd
	 * 
	 * @param billingCycle     账期,例如:201910
	 * @return
	 * 
	 * @author moon  2019/12/17  23:59
	 */
	public static List<Integer> getMonthDays(Integer billingCycle) {
		
		List<Integer> monthDays = new ArrayList<Integer>();
		
		int startNum = 1;
		
		LocalDate localDate = LocalDate.parse(billingCycle + "01", DateTimeFormatter.ofPattern("yyyyMMdd"));
		System.out.println("localDate为:" + localDate);
		
		int lastNum = localDate.with(TemporalAdjusters.lastDayOfMonth()).getDayOfMonth();
		System.out.println("lastNum为:" + lastNum);
		
		Integer firstDay = new Integer(localDate.format(DateTimeFormatter.BASIC_ISO_DATE));
		System.out.println("firstDay为:" + firstDay);
		
		// monthDays.add(firstDay);
		
		for (int i = startNum; i <= lastNum; i++) {
			
			monthDays.add(firstDay);
			firstDay++;
		}
		
		
		System.out.println("monthDays为:" + monthDays);
		return monthDays;
	}
	
	
	
	/**
	 * 求取每月中的第一天,最后一天。
	 * 
	 * @author moon  2019/12/17  23:55
	 */
	public static void test01() {
		
		LocalDate localDate = LocalDate.parse("201902" + "01", DateTimeFormatter.ofPattern("yyyyMMdd"));
		LocalDate localDate1 = localDate.with(TemporalAdjusters.firstDayOfMonth());
		LocalDate localDate2 = localDate.with(TemporalAdjusters.lastDayOfMonth());
		
		System.out.println("localDate1为:" + localDate1);
		System.out.println("localDate2为:" + localDate2);
		
		System.out.println(localDate.getDayOfMonth());  // getDayOfMonth是获取当前日期中的天数,例如2019-02-14,获取的值为14.
		System.out.println(localDate.with(TemporalAdjusters.lastDayOfMonth()));
		System.out.println(localDate.with(TemporalAdjusters.lastDayOfMonth()).getDayOfMonth());
	}
	
	
}

 

 

运行结果如下,请仔细看日志。

localDate1为:2019-02-01
localDate2为:2019-02-28
1
2019-02-28
28
---------------------- 分割线1 ----------------------
localDate为:2019-02-01
lastNum为:28
firstDay为:20190201
monthDays为:[20190201, 20190202, 20190203, 20190204, 20190205, 20190206, 20190207, 20190208, 20190209, 20190210, 20190211, 20190212, 20190213, 20190214, 20190215, 20190216, 20190217, 20190218, 20190219, 20190220, 20190221, 20190222, 20190223, 20190224, 20190225, 20190226, 20190227, 20190228]
---------------------- 分割线2 ----------------------
localDate为:2020-02-01
lastNum为:29
firstDay为:20200201
monthDays为:[20200201, 20200202, 20200203, 20200204, 20200205, 20200206, 20200207, 20200208, 20200209, 20200210, 20200211, 20200212, 20200213, 20200214, 20200215, 20200216, 20200217, 20200218, 20200219, 20200220, 20200221, 20200222, 20200223, 20200224, 20200225, 20200226, 20200227, 20200228, 20200229]
---------------------- 分割线3 ----------------------
localDate为:2019-03-01
lastNum为:31
firstDay为:20190301
monthDays为:[20190301, 20190302, 20190303, 20190304, 20190305, 20190306, 20190307, 20190308, 20190309, 20190310, 20190311, 20190312, 20190313, 20190314, 20190315, 20190316, 20190317, 20190318, 20190319, 20190320, 20190321, 20190322, 20190323, 20190324, 20190325, 20190326, 20190327, 20190328, 20190329, 20190330, 20190331]


 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是关于JDK 8日期相关类的介绍和示例: 1. LocalDate类: - LocalDate类表示一个不可变的日期对象,它只包含日期部分(年、月、日)。 - 使用`now()`方法获取当前日期。 - 使用`of()`方法创建指定日期。 - 使用`getXXX()`方法获取日期的年、月、日等部分。 - 使用`plusXXX()`和`minusXXX()`方法进行日期的加减操作。 - 使用`isXXX()`方法判断日期的属性,如是否为闰年等。 示例代码: ```java import java.time.LocalDate; // 获取当前日期 LocalDate currentDate = LocalDate.now(); System.out.println("当前日期: " + currentDate); // 创建指定日期 LocalDate specificDate = LocalDate.of(2022, 1, 1); System.out.println("指定日期: " + specificDate); // 获取日期的年、月、日 int year = currentDate.getYear(); int month = currentDate.getMonthValue(); int day = currentDate.getDayOfMonth(); System.out.println("年: " + year + ", 月: " + month + ", 日: " + day); // 日期的加减操作 LocalDate futureDate = currentDate.plusDays(7); LocalDate pastDate = currentDate.minusMonths(1); System.out.println("未来日期: " + futureDate); System.out.println("过去日期: " + pastDate); // 判断是否为闰年 boolean isLeapYear = currentDate.isLeapYear(); System.out.println("是否为闰年: " + isLeapYear); ``` 2. LocalTime类: - LocalTime类表示一个不可变的时间对象,它只包含时间部分(时、分、秒、纳秒)。 - 使用`now()`方法获取当前时间。 - 使用`of()`方法创建指定时间。 - 使用`getXXX()`方法获取时间的时、分、秒等部分。 - 使用`plusXXX()`和`minusXXX()`方法进行时间的加减操作。 示例代码: ```java import java.time.LocalTime; // 获取当前时间 LocalTime currentTime = LocalTime.now(); System.out.println("当前时间: " + currentTime); // 创建指定时间 LocalTime specificTime = LocalTime.of(12, 30, 0); System.out.println("指定时间: " + specificTime); // 获取时间的时、分、秒 int hour = currentTime.getHour(); int minute = currentTime.getMinute(); int second = currentTime.getSecond(); System.out.println("时: " + hour + ", 分: " + minute + ", 秒: " + second); // 时间的加减操作 LocalTime futureTime = currentTime.plusHours(2); LocalTime pastTime = currentTime.minusMinutes(30); System.out.println("未来时间: " + futureTime); System.out.println("过去时间: " + pastTime); ``` 3. LocalDateTime类: - LocalDateTime类表示一个不可变的日期时间对象,它包含日期和时间部分。 - 使用`now()`方法获取当前日期时间。 - 使用`of()`方法创建指定日期时间。 - 使用`getXXX()`方法获取日期时间的年、月、日、时、分、秒等部分。 - 使用`plusXXX()`和`minusXXX()`方法进行日期时间的加减操作。 示例代码: ```java import java.time.LocalDateTime; // 获取当前日期时间 LocalDateTime currentDateTime = LocalDateTime.now(); System.out.println("当前日期时间: " + currentDateTime); // 创建指定日期时间 LocalDateTime specificDateTime = LocalDateTime.of(2022, 1, 1, 12, 30, 0); System.out.println("指定日期时间: " + specificDateTime); // 获取日期时间的年、月、日、时、分、秒 int year = currentDateTime.getYear(); int month = currentDateTime.getMonthValue(); int day = currentDateTime.getDayOfMonth(); int hour = currentDateTime.getHour(); int minute = currentDateTime.getMinute(); int second = currentDateTime.getSecond(); System.out.println("年: " + year + ", 月: " + month + ", 日: " + day); System.out.println("时: " + hour + ", 分: " + minute + ", 秒: " + second); // 日期时间的加减操作 LocalDateTime futureDateTime = currentDateTime.plusDays(7); LocalDateTime pastDateTime = currentDateTime.minusMonths(1); System.out.println("未来日期时间: " + futureDateTime); System.out.println("过去日期时间: " + pastDateTime); ``` 4. Calendar类: - Calendar类是Java旧版的日期时间处理类,JDK 8之后推荐使用新的日期时间API。 - Calendar类可以用于获取和设置日期时间的各个部分,如年、月、日、时、分、秒等。 - 使用`getInstance()`方法获取当前日期时间的Calendar实例。 - 使用`get()`方法获取日期时间的各个部分。 - 使用`set()`方法设置日期时间的各个部分。 示例代码: ```java import java.util.Calendar; // 获取当前日期时间的Calendar实例 Calendar currentCalendar = Calendar.getInstance(); System.out.println("当前日期时间: " + currentCalendar.getTime()); // 获取日期时间的年、月、日、时、分、秒 int year = currentCalendar.get(Calendar.YEAR); int month = currentCalendar.get(Calendar.MONTH) + 1; // 月份从0开始,需要加1 int day = currentCalendar.get(Calendar.DAY_OF_MONTH); int hour = currentCalendar.get(Calendar.HOUR_OF_DAY); int minute = currentCalendar.get(Calendar.MINUTE); int second = currentCalendar.get(Calendar.SECOND); System.out.println("年: " + year + ", 月: " + month + ", 日: " + day); System.out.println("时: " + hour + ", 分: " + minute + ", 秒: " + second); // 设置日期时间的年、月、日、时、分、秒 currentCalendar.set(Calendar.YEAR, 2022); currentCalendar.set(Calendar.MONTH, 0); // 月份从0开始,0表示1月 currentCalendar.set(Calendar.DAY_OF_MONTH, 1); currentCalendar.set(Calendar.HOUR_OF_DAY, 12); currentCalendar.set(Calendar.MINUTE, 30); currentCalendar.set(Calendar.SECOND, 0); System.out.println("设置后的日期时间: " + currentCalendar.getTime()); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值