0
点赞
收藏
分享

微信扫一扫

Lambda LocalDate

大明宫 2022-03-30 阅读 76
java

import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.Period;
import java.time.temporal.ChronoField;
import java.time.temporal.ChronoUnit;
import java.time.temporal.TemporalAdjusters;
import java.time.temporal.TemporalAmount;
import java.time.temporal.TemporalUnit;

public enum UtilityDate {
	
	INSTANCE;
	
	/**
	 * 获取当日日期
	 * @return YYYY-MM-DD
	 */
	public String getToday() {
		return LocalDate.now().toString();
	}
	
	/**
	 * 获取指定日期的月份的第几个星期几是几号
	 * @param date 指定日期
	 * @param ordinal 第几个星期,无限制,但通常在-5到5之间
	 * @param dayOfWeek 星期几
	 * @return YYYY-MM-DD
	 */
	public String getDayOfWeekInMonth(LocalDate date, int ordinal, DayOfWeek dayOfWeek) {
		return date.with(TemporalAdjusters.dayOfWeekInMonth(ordinal, dayOfWeek)).toString();
	}
	
	/**
	 * 获取一个新的日期,它的值为指定日期当月的第一天
	 * @param date 指定日期
	 * @return YYYY-MM-DD
	 */
	public String getFirstDayOfMonth(LocalDate date) {
		return date.with(TemporalAdjusters.firstDayOfMonth()).toString();
	}
	
	/**
	 * 获取一个新的日期,它的值为指定日期下月的第一天
	 * @param date 指定日期
	 * @return YYYY-MM-DD
	 */
	public String getFirstDayOfNextMonth(LocalDate date) {
		return date.with(TemporalAdjusters.firstDayOfNextMonth()).toString();
	}
	
	/**
	 * 获取一个新的日期,它的值为指定日期当年的第一天
	 * @param date 指定日期
	 * @return YYYY-MM-DD
	 */
	public String getFirstDayOfYear(LocalDate date) {
		return date.with(TemporalAdjusters.firstDayOfYear()).toString();
	}
	
	/**
	 * 获取一个新的日期,它的值为指定日期明年的第一天
	 * @param date 指定日期
	 * @return YYYY-MM-DD
	 */
	public String getFirstDayOfNextYear(LocalDate date) {
		return date.with(TemporalAdjusters.firstDayOfNextYear()).toString();
	}
	
	/**
	 * 获取一个新的日期,它的值为指定日期同一个月中,第一个符合星期几要求的日期
	 * @param date 指定日期
	 * @param dayOfWeek 星期几
	 * @return YYYY-MM-DD
	 */
	public String getFirstInMonth(LocalDate date, DayOfWeek dayOfWeek) {
		return date.with(TemporalAdjusters.firstInMonth(dayOfWeek)).toString();
	}

	/**
	 * 获取一个新的日期,它的值为指定日期当月的最后一天
	 * @param date 指定日期
	 * @return YYYY-MM-DD
	 */
	public String getLastDayOfMonth(LocalDate date) {
		return date.with(TemporalAdjusters.lastDayOfMonth()).toString();
	}
	
//	lastDayOfNextMonth 创建一个新的日期,它的值为下月的最后一天
//	public String getLastDayOfNextMonth(LocalDate date) {
//		return date.with(TemporalAdjusters.lastdof)
//	}
	
	
	/**
	 * 获取一个新的日期,它的值为指定日期当年的最后一天
	 * @param date 指定日期
	 * @return YYYY-MM-DD
	 */
	public String getLastDayOfYear(LocalDate date) {
		return date.with(TemporalAdjusters.lastDayOfYear()).toString();
	}
	
	/**
	 * 获取一个新的日期,它的值为指定日期同一个月中,最后一个符合星期几要求的值
	 * @param date 指定日期
	 * @param dayOfWeek 星期几
	 * @return YYYY-MM-DD
	 */
	public String getLastInMonth(LocalDate date, DayOfWeek dayOfWeek) {
		return date.with(TemporalAdjusters.lastInMonth(dayOfWeek)).toString();
	}
	
	/**
	 * 获取一个新的日期,它的值为指定日期的下一个星期几
	 * @param date 指定日期
	 * @param dayOfWeek 星期几
	 * @return YYYY-MM-DD
	 */
	public String getNextWeekByCurrentDate(LocalDate date, DayOfWeek dayOfWeek) {
		return date.with(TemporalAdjusters.next(dayOfWeek)).toString();
	}
	
	/**
	 * 获取一个新的日期,它的值为指定日期的前一个星期几
	 * @param date 指定日期
	 * @param dayOfWeek 星期几
	 * @return YYYY-MM-DD
	 */
	public String getPreviousWeekByCurrentDate(LocalDate date, DayOfWeek dayOfWeek) {
		return date.with(TemporalAdjusters.previous(dayOfWeek)).toString();
	}
	
	/**
	 * 获取一个新的日期,它的值为指定日期的下一个星期几,如果当日符合,则返回当日
	 * @param date 指定日期
	 * @param dayOfWeek 星期几
	 * @return YYYY-MM-DD
	 */
	public String getNextOrSameWeekByCurrentDate(LocalDate date, DayOfWeek dayOfWeek) {
		return date.with(TemporalAdjusters.nextOrSame(dayOfWeek)).toString();
	}
	
	/**
	 * 获取一个新的日期,它的值为指定日期的上一个星期几,如果当日符合,则返回当日
	 * @param date 指定日期
	 * @param dayOfWeek 星期几
	 * @return YYYY-MM-DD
	 */
	public String getPreviousOrSame(LocalDate date, DayOfWeek dayOfWeek) {
		return date.with(TemporalAdjusters.previousOrSame(dayOfWeek)).toString();
	}
	
	/**
	 * 比较第一个参数日期是否在第二个参数日期之前
	 * @param firstDate 第一个参数日期
	 * @param secondDate 第二个参数日期
	 * @return true-是 false-否
	 */
	public boolean isFirstDateBeforeSecondDate(LocalDate firstDate, LocalDate secondDate) {
		return firstDate.isBefore(secondDate);
	}
	
	/**
	 * 比较第一个参数日期是否在第二个参数日期之后
	 * @param firstDate 第一个参数日期
	 * @param secondDate 第二个参数日期
	 * @return true-是  false-否
	 */
	public boolean isFirstDateAfterSecondDate(LocalDate firstDate, LocalDate secondDate) {
		return firstDate.isAfter(secondDate);
	}
	
	/**
	 * 比较第一个参数日期是否等于第二个参数日期
	 * @param firstDate 第一个参数日期
	 * @param secondDate 第二个参数日期
	 * @return true-是  false-否
	 */
	public boolean isFirstDateEqualSecondDate(LocalDate firstDate, LocalDate secondDate) {
		return firstDate.isEqual(secondDate);
	}
	
	/**
	 * 获取一个新的日期,它的值为指定日期加上指定天数
	 * @param date 指定日期
	 * @param daysToAdd 增加的天数,可以为负数
	 * @return YYYY-MM-DD
	 */
	public String plusDays(LocalDate date, long daysToAdd) {
		return date.plusDays(daysToAdd).toString();
	}
	
	/**
	 * 获取一个新的日期,它的值为指定日期减去指定天数
	 * @param date 指定日期
	 * @param daysToSubtract 减去的天数,可以为负数
	 * @return YYYY-MM-DD
	 */
	public String minusDays(LocalDate date, long daysToSubtract) {
		return date.minusDays(daysToSubtract).toString();
	}
	
	/**
	 * 获取一个新的日期,它的值为指定日期加上一个时间段
	 * @param date 指定日期
	 * @param amountToAdd 增加的时间段,可以为负数
	 * @return YYYY-MM-DD
	 */
	public String plus(LocalDate date, TemporalAmount amountToAdd) {
		return date.plus(amountToAdd).toString();
	}
	
	/**
	 * 获取一个新的日期,它的值为指定日期加上若干数量的时间单位
	 * @param date 指定日期
	 * @param amountToAdd 时间单位数量,可以为负数
	 * @param unit 时间单位 [ChronoUnit.CENTURIES、DAYS、DECADES、WEEKS、YEARS]
	 * @return YYYY-MM-DD
	 */
	public String plus(LocalDate date, long amountToAdd, TemporalUnit unit) {
		return date.plus(amountToAdd, unit).toString();
	}
	
	/**
	 * 获取一个新的日期,它的值为指定日期减去一个时间段
	 * @param date 指定日期
	 * @param amountToSubtract 减去的时间段,可以为负数
	 * @return YYYY-MM-DD
	 */
	public String minus(LocalDate date, TemporalAmount amountToSubtract) {
		return date.minus(amountToSubtract).toString();
	}
	
	/**
	 * 获取一个新的日期,它的值为指定日期减去若干数量的时间单位
	 * @param date 指定日期
	 * @param amountToSubtract 时间单位数量,可以为负数
	 * @param unit 时间单位 [ChronoUnit.CENTURIES、DAYS、DECADES、WEEKS、YEARS]
	 * @return YYYY-MM-DD
	 */
	public String minus(LocalDate date, long amountToSubtract, TemporalUnit unit) {
		return date.minus(amountToSubtract, unit).toString();
	}
	
	/**
	 * 获取年份值,它的值为指定日期的年份值
	 * @param date 指定日期
	 * @return 年份值
	 */
	public int getYearByDate(LocalDate date) {
		return date.getYear();
	}
	
	/**
	 * 获取月份值,它的值为指定日期的月份值
	 * @param date 指定日期
	 * @return 月份值
	 */
	public int getMonthByDate(LocalDate date) {
		return date.getMonthValue();
	}
	
	/**
	 * 获取日期值,它的值为指定日期月份中的日期值
	 * @param date 指定日期
	 * @return 日期值
	 */
	public int getDayOfMonth(LocalDate date) {
		return date.getDayOfMonth();
	}
	
	/**
	 * 获取天数值,它的值为指定日期在当年中的天数
	 * @param date 指定日期
	 * @return 天数值
	 */
	public int getDayOfYear(LocalDate date) {
		return date.getDayOfYear();
	}
	
	/**
	 * 获取星期,它的值为指定日期在当周中的星期
	 * @param date 指定日期
	 * @return 星期
	 */
	public String getDayOfWeek(LocalDate date) {
		return date.getDayOfWeek().toString();
	}
	
	/**
	 * 获取英文月份,它的值为指定日期当月的月份
	 * @param date 指定日期
	 * @return 英文月份
	 */
	public String getMonthOfEN(LocalDate date) {
		return date.getMonth().toString();
	}
	
	/**
	 * 获取英文星期,它的值为指定日期的星期
	 * @param date 指定日期
	 * @return 英文星期
	 */
	public String getWeekOfEN(LocalDate date) {
		return date.getDayOfWeek().toString();
	}
	
	/**
	 * 获取中文月份,它的值为指定日期当月的月份
	 * @param date 指定日期
	 * @return 中文月份
	 */
	public String getMonthOfCN(LocalDate date) {
		String month = "";
		switch (date.getMonthValue()) {
		case 1:
			month = "一月";
			break;
		case 2:
			month = "二月";
			break;
		case 3:
			month = "三月";
			break;
		case 4:
			month = "四月";
			break;
		case 5:
			month = "五月";
			break;
		case 6:
			month = "六月";
			break;
		case 7:
			month = "七月";
			break;
		case 8:
			month = "八月";
			break;
		case 9:
			month = "九月";
			break;
		case 10:
			month = "十月";
			break;
		case 11:
			month = "十一月";
			break;
		case 12:
			month = "十二月";
			break;
		default:
			break;
		}
		return month;
	}
	
	/**
	 * 获取中文星期,它的值为指定日期的星期
	 * @param date 指定日期
	 * @return 中文星期
	 */
	public String getWeekOfCN(LocalDate date) {
		String week = "";
		switch (date.getDayOfWeek()) {
		case MONDAY:
			week = "星期一";
			break;
		case TUESDAY:
			week = "星期二";
			break;
		case WEDNESDAY:
			week = "星期三";
			break;
		case THURSDAY:
			week = "星期四";
			break;
		case FRIDAY:
			week = "星期五";
			break;
		case SATURDAY:
			week = "星期六";
			break;
		case SUNDAY:
			week = "星期日";
			break;
		default:
			break;
		}
		return week;
	}
	
	/**
	 * 获取一个新的日期,它的值为指定日期后的第几天
	 * @param date 指定日期
	 * @param days 天数
	 * @return YYYY-MM-DD
	 */
	public String getNextNDay(LocalDate date, long days) {
		return date.with(adjuster -> adjuster.plus(days, ChronoUnit.DAYS)).toString();
	}
	
	/**
	 * 获取一个新的日期,它的值为指定日期前的第几天
	 * @param date 指定日期
	 * @param days 天数
	 * @return YYYY-MM-DD
	 */
	public String getPreviousNDay(LocalDate date, long days) {
		return date.with(adjuster -> adjuster.minus(days, ChronoUnit.DAYS)).toString();
	}
	
	public static void main(String[] args) {
		System.out.println(UtilityDate.INSTANCE.getWeekOfCN(LocalDate.now()));
		System.out.println(UtilityDate.INSTANCE.getWeekOfEN(LocalDate.now()));
		System.out.println(UtilityDate.INSTANCE.getPreviousNDay(LocalDate.now(), 1));
		System.out.println(UtilityDate.INSTANCE.getNextNDay(LocalDate.now(), 1));
		System.out.println(UtilityDate.INSTANCE.getMonthOfCN(LocalDate.now()));
		System.out.println(UtilityDate.INSTANCE.getMonthOfEN(LocalDate.now()));
		System.out.println(UtilityDate.INSTANCE.getDayOfWeek(LocalDate.now()));
		System.out.println(UtilityDate.INSTANCE.getDayOfYear(LocalDate.now()));
		System.out.println(UtilityDate.INSTANCE.getDayOfMonth(LocalDate.now()));
		System.out.println(UtilityDate.INSTANCE.getMonthByDate(LocalDate.now()));
		System.out.println(UtilityDate.INSTANCE.getYearByDate(LocalDate.now()));
		System.out.println("----------------------------");
		System.out.println(LocalDate.now().get(ChronoField.ALIGNED_DAY_OF_WEEK_IN_MONTH));
		System.out.println(LocalDate.of(2022, 3, 3).get(ChronoField.ALIGNED_DAY_OF_WEEK_IN_YEAR));
		System.out.println(LocalDate.now().get(ChronoField.ALIGNED_WEEK_OF_MONTH));
		System.out.println(LocalDate.now().get(ChronoField.ALIGNED_WEEK_OF_YEAR));
		System.out.println(LocalDate.now().get(ChronoField.MONTH_OF_YEAR));
		System.out.println(LocalDate.now().get(ChronoField.YEAR));
		System.out.println(LocalDate.now().getDayOfMonth());
		System.out.println(LocalDate.now().getMonthValue());
		System.out.println(LocalDate.now().getDayOfWeek());
		System.out.println(LocalDate.now().getMonth());
		System.out.println(LocalDate.now().getYear());
		System.out.println("----------------------------");
		System.out.println(UtilityDate.INSTANCE.minus(LocalDate.now(), 1, ChronoUnit.CENTURIES)); // 当前时间减去一个世纪
		System.out.println(UtilityDate.INSTANCE.minus(LocalDate.now(), 1, ChronoUnit.DAYS));      // 当前时间减去一天
		System.out.println(UtilityDate.INSTANCE.minus(LocalDate.now(), 1, ChronoUnit.DECADES));   // 当前时间减去十年
		System.out.println(UtilityDate.INSTANCE.minus(LocalDate.now(), 1, ChronoUnit.WEEKS));     // 当前时间减去一周
		System.out.println(UtilityDate.INSTANCE.minus(LocalDate.now(), 1, ChronoUnit.YEARS));     // 当前时间减去一年
		System.out.println("----------------------------");
		System.out.println(UtilityDate.INSTANCE.minus(LocalDate.now(), Period.ZERO));
		System.out.println(UtilityDate.INSTANCE.minus(LocalDate.now(), Period.between(LocalDate.of(2022, 3, 3), LocalDate.of(2022, 3, 5))));
		System.out.println(UtilityDate.INSTANCE.minus(LocalDate.now(), Period.from(Period.ofDays(2))));
		System.out.println(UtilityDate.INSTANCE.minus(LocalDate.now(), Period.of(1, 0, 0)));
		System.out.println(UtilityDate.INSTANCE.minus(LocalDate.now(), Period.ofDays(-10)));
		System.out.println(UtilityDate.INSTANCE.minus(LocalDate.now(), Period.ofMonths(1)));
		System.out.println(UtilityDate.INSTANCE.minus(LocalDate.now(), Period.ofWeeks(1)));
		System.out.println(UtilityDate.INSTANCE.minus(LocalDate.now(), Period.ofYears(1)));
		System.out.println(UtilityDate.INSTANCE.minus(LocalDate.now(), Period.parse("P2Y")));
		System.out.println("----------------------------");
		System.out.println(UtilityDate.INSTANCE.plus(LocalDate.now(), 1, ChronoUnit.CENTURIES)); // 当前时间增加一个世纪
		System.out.println(UtilityDate.INSTANCE.plus(LocalDate.now(), 1, ChronoUnit.DAYS));      // 当前时间增加一天
		System.out.println(UtilityDate.INSTANCE.plus(LocalDate.now(), 1, ChronoUnit.DECADES));   // 当前时间增加十年
		System.out.println(UtilityDate.INSTANCE.plus(LocalDate.now(), 1, ChronoUnit.WEEKS));     // 当前时间增加一周
		System.out.println(UtilityDate.INSTANCE.plus(LocalDate.now(), 1, ChronoUnit.YEARS));     // 当前时间增加一年
		System.out.println("----------------------------");
		System.out.println(UtilityDate.INSTANCE.plus(LocalDate.now(), Period.ZERO));
		System.out.println(UtilityDate.INSTANCE.plus(LocalDate.now(), Period.between(LocalDate.of(2022, 3, 3), LocalDate.of(2022, 3, 5))));
		System.out.println(UtilityDate.INSTANCE.plus(LocalDate.now(), Period.from(Period.ofDays(2))));
		System.out.println(UtilityDate.INSTANCE.plus(LocalDate.now(), Period.of(1, 0, 0)));
		System.out.println(UtilityDate.INSTANCE.plus(LocalDate.now(), Period.ofDays(-10)));
		System.out.println(UtilityDate.INSTANCE.plus(LocalDate.now(), Period.ofMonths(1)));
		System.out.println(UtilityDate.INSTANCE.plus(LocalDate.now(), Period.ofWeeks(1)));
		System.out.println(UtilityDate.INSTANCE.plus(LocalDate.now(), Period.ofYears(1)));
		System.out.println(UtilityDate.INSTANCE.plus(LocalDate.now(), Period.parse("P2Y")));

		System.out.println(LocalDate.now().plus(Period.ofDays(1)));
//		System.out.println(LocalDate.now().plus());
		System.out.println(LocalDate.now().plusMonths(1));
		System.out.println(LocalDate.now().plusWeeks(1));
		System.out.println(LocalDate.now().plusYears(1));
		System.out.println(UtilityDate.INSTANCE.plusDays(LocalDate.now(), 2));
		System.out.println(UtilityDate.INSTANCE.isFirstDateEqualSecondDate(LocalDate.of(2012, 6, 30), LocalDate.of(2012, 6, 30)));
		System.out.println(UtilityDate.INSTANCE.isFirstDateAfterSecondDate(LocalDate.of(2012, 6, 30), LocalDate.of(2012, 6, 29)));
		System.out.println(UtilityDate.INSTANCE.isFirstDateBeforeSecondDate(LocalDate.of(2012, 6, 30), LocalDate.of(2012, 7, 1)));
		System.out.println(UtilityDate.INSTANCE.getPreviousOrSame(LocalDate.now(), DayOfWeek.MONDAY));
		System.out.println(UtilityDate.INSTANCE.getNextOrSameWeekByCurrentDate(LocalDate.now(), DayOfWeek.THURSDAY));
		System.out.println(UtilityDate.INSTANCE.getNextWeekByCurrentDate(LocalDate.now(), DayOfWeek.THURSDAY));
		System.out.println(UtilityDate.INSTANCE.getPreviousWeekByCurrentDate(LocalDate.now(), DayOfWeek.FRIDAY));
		System.out.println(UtilityDate.INSTANCE.getLastInMonth(LocalDate.now(), DayOfWeek.FRIDAY));
		System.out.println(UtilityDate.INSTANCE.getLastDayOfYear(LocalDate.now()));
		System.out.println(UtilityDate.INSTANCE.getLastDayOfMonth(LocalDate.now()));
		System.out.println(UtilityDate.INSTANCE.getFirstInMonth(LocalDate.now(), DayOfWeek.FRIDAY));
		System.out.println(UtilityDate.INSTANCE.getFirstDayOfNextYear(LocalDate.now()));
		System.out.println(UtilityDate.INSTANCE.getFirstDayOfYear(LocalDate.now()));
		System.out.println(UtilityDate.INSTANCE.getFirstDayOfNextMonth(LocalDate.now()));
		System.out.println(UtilityDate.INSTANCE.getToday());
		System.out.println(UtilityDate.INSTANCE.getDayOfWeekInMonth(LocalDate.now(), 1, DayOfWeek.FRIDAY));
		System.out.println(UtilityDate.INSTANCE.getFirstDayOfMonth(LocalDate.now()));
		LocalDate date = LocalDate.now();
		
		System.out.println(date.with(TemporalAdjusters.firstDayOfMonth()));
		
		System.out.println(date.with(TemporalAdjusters.dayOfWeekInMonth(-5, DayOfWeek.FRIDAY))); // 2022-02-25	这个月的倒数第五个星期五是几号
		System.out.println(date.with(TemporalAdjusters.dayOfWeekInMonth(-4, DayOfWeek.FRIDAY))); // 2022-03-04	这个月的倒数第四个星期五是几号
		System.out.println(date.with(TemporalAdjusters.dayOfWeekInMonth(-3, DayOfWeek.FRIDAY))); // 2022-03-11	这个月的倒数第三个星期五是几号
		System.out.println(date.with(TemporalAdjusters.dayOfWeekInMonth(-2, DayOfWeek.FRIDAY))); // 2022-03-18	这个月的倒数第二个星期五是几号
		System.out.println(date.with(TemporalAdjusters.dayOfWeekInMonth(-1, DayOfWeek.FRIDAY))); // 2022-03-25	这个月的最后一个星期五是几号
		System.out.println(date.with(TemporalAdjusters.dayOfWeekInMonth(0, DayOfWeek.FRIDAY)));  // 2022-02-25	上个月的最后一个星期五是几号
		System.out.println(date.with(TemporalAdjusters.dayOfWeekInMonth(1, DayOfWeek.FRIDAY)));  // 2022-03-04	这个月的第一个星期五是几号
		System.out.println(date.with(TemporalAdjusters.dayOfWeekInMonth(2, DayOfWeek.FRIDAY)));  // 2022-03-11	这个月的第二个星期五是几号
		System.out.println(date.with(TemporalAdjusters.dayOfWeekInMonth(3, DayOfWeek.FRIDAY)));  // 2022-03-18	这个月的第三个星期五是几号
		System.out.println(date.with(TemporalAdjusters.dayOfWeekInMonth(4, DayOfWeek.FRIDAY)));  // 2022-03-25	这个月的第四个星期五是几号
		System.out.println(date.with(TemporalAdjusters.dayOfWeekInMonth(5, DayOfWeek.FRIDAY)));  // 2022-04-01	这个月的第五个星期五是几号
	}

}
举报

相关推荐

0 条评论