java8 LocalDate LocalTime LocalDateTime ChronoUnit DateTimeFormatter TemporalAdjusters

2022年11月18日09:25:31

java8 LocalDate LocalTime LocalDateTime ChronoUnit DateTimeFormatter TemporalAdjusters

import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.time.temporal.TemporalAdjusters;

/**
 * 
 * @author InJavaWeTrust
 *
 */
public enum UtilDate {
	
	INSTANCE;
	
	private LocalDate now = LocalDate.now();
	
	private LocalTime time = LocalTime.now();
	
	/**
	 * 获取当前年份
	 * @return 当前年份
	 */
	public int getYear() {
		return now.getYear();
	}
	
	/**
	 * 获取指定日期年份
	 * @param localDate 日期
	 * @return 指定日期年份
	 */
	public int getYear(LocalDate localDate) {
		return localDate.getYear();
	}
	
	/**
	 * 获取当前月份
	 * @return 当前月份,1至12
	 */
	public int getMonth() {
		return now.getMonthValue();
	}
	
	/**
	 * 获取指定日期月份
	 * @param localDate 日期
	 * @return 月份
	 */
	public int getMonth(LocalDate localDate) {
		return localDate.getMonthValue();
	}
	
	/**
	 * 获取当前月份第几天
	 * @return 获取当前月份第几天,1至31
	 */
	public int getDayOfMonth() {
		return now.getDayOfMonth();
	}
	
	/**
	 * 获取指定日期天数
	 * @param localDate 日期
	 * @return 指定日期天数
	 */
	public int getDayOfMonth(LocalDate localDate) {
		return localDate.getDayOfMonth();
	}
	
	/**
	 * 获取当前时间
	 * @return 当前时间
	 */
	public LocalTime getTimeOfDay() {
		return time.withNano(0);
	}
	
	/**
	 * 获取当前星期
	 * @return 当前星期
	 */
	public DayOfWeek getWeek() {
		return now.getDayOfWeek();
	}
	
	/**
	 * 获取当前年有多少天
	 * @return 当前年有多少天,365或366
	 */
	public int lengthOfYear() {
		return now.lengthOfYear();
	}
	
	/**
	 * 获取当前月有多少天
	 * @return 前月有多少天,28、29、30或31
	 */
	public int lengthOfMonth() {
		return now.lengthOfMonth();
	}
	
	/**
	 * 获取当前是当年第几天
	 * @return 当前日期是当年第几天
	 */
	public int getDayOfYear() {
		return now.getDayOfYear();
	}
	
	/**
	 * 获取指定日期是当年第几天
	 * @param localDate 日期
	 * @return 指定日期是当年第几天
	 */
	public int getDayOfYear(LocalDate localDate) {
		return localDate.getDayOfYear();
	}
	
	/**
	 * 获取当前月第一天
	 * @return 当前月第一天
	 */
	public LocalDate firstDayOfMonth() {
		return now.with(TemporalAdjusters.firstDayOfMonth());
	}
	
	/**
	 * 获取当前月最后一天
	 * @return 当前月最后一天
	 */
	public LocalDate lastDayOfMonth() {
		return now.with(TemporalAdjusters.lastDayOfMonth());
	}
	
	/**
	 * 获取当前月第N天
	 * @param dayOfMonth 当前月第N天,1至28-31
	 * @return 当前月第N天
	 */
	public LocalDate getNDayOfMonth(int dayOfMonth) {
		return now.withDayOfMonth(dayOfMonth);
	}
	
	/**
	 * 获取当前月第一个星期几的日期
	 * @param dayOfWeek 星期
	 * @return 当前月第一个星期几的日期
	 */
	public LocalDate firstDayOfWeekInMonth(DayOfWeek dayOfWeek) {
		return now.with(TemporalAdjusters.firstInMonth(dayOfWeek));
	}
	
	/**
	 * 获取当前月最后一个星期几的日期
	 * @param dayOfWeek 星期
	 * @return 当前月最后一个星期几的日期
	 */
	public LocalDate lastDayOfWeekInMonth(DayOfWeek dayOfWeek) {
		return now.with(TemporalAdjusters.lastInMonth(dayOfWeek));
	}
	
	/**
	 * 获取当前年第一天
	 * @return 当前年第一天
	 */
	public LocalDate getfirstDayOfYear() {
		return now.with(TemporalAdjusters.firstDayOfYear());
	}
	
	/**
	 * 获取当前年最后一天
	 * @return 当前年最后一天
	 */
	public LocalDate getLastDayOfYear() {
		return now.with(TemporalAdjusters.lastDayOfYear());
	}
	
	/**
	 * 获取当前年第N天
	 * @param dayOfYear 当前年第N天,1至365或366
	 * @return 当前年第N天
	 */
	public LocalDate getNDayOfYear(int dayOfYear) {
		return now.withDayOfYear(dayOfYear);
	}
	
	/**
	 * 获取格式化后的日期
	 * @param localDate 日期
	 * @param dateTimeFormatter 日期格式
	 * @return 格式化后的日期
	 */
	public String getLocalDateFormatter(LocalDate localDate, DateTimeFormatter dateTimeFormatter) {
		return localDate.format(dateTimeFormatter);
	}
	
	/**
	 * 获取格式化后的日期时间
	 * @param localDateTime 日期时间
	 * @param dateTimeFormatter 日期时间格式
	 * @return 格式化后的日期时间
	 */
	public String getLocalDateIimeFormatter(LocalDateTime localDateTime, DateTimeFormatter dateTimeFormatter) {
		return localDateTime.format(dateTimeFormatter);
	}
	
	/**
	 * 获取指定日期时间的最大时间
	 * @param localDateTime 日期时间
	 * @param dateTimeFormatter 日期时间格式
	 * @return 指定日期时间的最大时间
	 */
	public String getMaxTimeByDate(LocalDateTime localDateTime, DateTimeFormatter dateTimeFormatter) {
		LocalDateTime maxTime = localDateTime.with(LocalTime.MAX);
		return maxTime.format(dateTimeFormatter);
	}
	
	/**
	 * 获取指定日期时间的最小时间
	 * @param localDateTime 日期时间
	 * @param dateTimeFormatter 日期时间格式
	 * @return 指定日期时间的最小时间
	 */
	public String getMinTimeByDate(LocalDateTime localDateTime, DateTimeFormatter dateTimeFormatter) {
		LocalDateTime minTime = localDateTime.with(LocalTime.MIN);
		return minTime.format(dateTimeFormatter);
	}
	
	/**
	 * 计算两个日期之间相差天数
	 * @param starDate 开始日期
	 * @param endDate 结束日期
	 * @return 两个日期相差天数
	 */
	public long getBetweenDays(LocalDate starDate, LocalDate endDate) {
		return ChronoUnit.DAYS.between(starDate, endDate);
	}
	
	public static void main(String[] args) {
		System.out.println("获取当前年份 " + UtilDate.INSTANCE.getYear());
		System.out.println("获取指定日期(2010-7-16)年份 " + UtilDate.INSTANCE.getYear(LocalDate.of(2010, 7, 16)));
		System.out.println("获取当前月份 " + UtilDate.INSTANCE.getMonth());
		System.out.println("获取指定日期(2017-8-17)月份 " + UtilDate.INSTANCE.getMonth(LocalDate.of(2017, 8, 17)));
		System.out.println("获取当前年份 " + UtilDate.INSTANCE.getDayOfMonth());
		System.out.println("获取指定日期(2017-8-17)天数 " + UtilDate.INSTANCE.getDayOfMonth(LocalDate.of(2017, 8, 17)));
		System.out.println("获取当前时间 " + UtilDate.INSTANCE.getTimeOfDay());
		System.out.println("获取当前星期 " + UtilDate.INSTANCE.getWeek());
		System.out.println("获取当前年有多少天 " + UtilDate.INSTANCE.lengthOfYear());
		System.out.println("获取当前月有多少天 " + UtilDate.INSTANCE.lengthOfMonth());
		System.out.println("获取当前是当年第几天 " + UtilDate.INSTANCE.getDayOfYear());
		System.out.println("获取指定日期(2010-2-14)是当年第几天 " + UtilDate.INSTANCE.getDayOfYear(LocalDate.of(2010, 2, 14)));
		System.out.println("获取当前月第一天 " + UtilDate.INSTANCE.firstDayOfMonth());
		System.out.println("获取当前月最后一天 " + UtilDate.INSTANCE.lastDayOfMonth());
		System.out.println("获取当前月第N天 " + UtilDate.INSTANCE.getNDayOfMonth(24));
		System.out.println("获取当前月第一个星期几的日期 " + UtilDate.INSTANCE.firstDayOfWeekInMonth(DayOfWeek.SUNDAY));
		System.out.println("获取当前月最后一个星期几的日期 " + UtilDate.INSTANCE.lastDayOfWeekInMonth(DayOfWeek.SUNDAY));
		System.out.println("获取当前月最后一个星期几的日期 " + UtilDate.INSTANCE.getfirstDayOfYear());
		System.out.println("获取当前年最后一天 " + UtilDate.INSTANCE.getLastDayOfYear());
		System.out.println("获取当前年第N天 " + UtilDate.INSTANCE.getNDayOfYear(242));
		System.out.println("获取格式化后的日期 " + UtilDate.INSTANCE.getLocalDateFormatter(LocalDate.now(), DateTimeFormatter.ofPattern("yyyy/MM/dd")));
		System.out.println("获取格式化后的日期 " + UtilDate.INSTANCE.getLocalDateFormatter(LocalDate.now(), DateTimeFormatter.ofPattern("yyyy MM dd")));
		System.out.println("获取格式化后的日期时间 " + UtilDate.INSTANCE.getLocalDateIimeFormatter(LocalDateTime.now(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
		System.out.println("获取指定日期时间的最大时间 " + UtilDate.INSTANCE.getMaxTimeByDate(LocalDateTime.now(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
		System.out.println("获取指定日期时间的最小时间 " + UtilDate.INSTANCE.getMinTimeByDate(LocalDateTime.now(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
		System.out.println("计算两个日期之间相差天数 " + UtilDate.INSTANCE.getBetweenDays(LocalDate.of(2014, 10, 9), LocalDate.now()));

	}

}
获取当前年份 2016
获取指定日期(2010-7-16)年份 2010
获取当前月份 8
获取指定日期(2017-8-17)月份 8
获取当前年份 1
获取指定日期(2017-8-17)天数 17
获取当前时间 12:41:17
获取当前星期 MONDAY
获取当前年有多少天 366
获取当前月有多少天 31
获取当前是当年第几天 214
获取指定日期(2010-2-14)是当年第几天 45
获取当前月第一天 2016-08-01
获取当前月最后一天 2016-08-31
获取当前月第N天 2016-08-24
获取当前月第一个星期几的日期 2016-08-07
获取当前月最后一个星期几的日期 2016-08-28
获取当前月最后一个星期几的日期 2016-01-01
获取当前年最后一天 2016-12-31
获取当前年第N天 2016-08-29
获取格式化后的日期 2016/08/01
获取格式化后的日期 2016 08 01
获取格式化后的日期时间 2016-08-01 12:41:17
获取指定日期时间的最大时间 2016-08-01 23:59:59
获取指定日期时间的最小时间 2016-08-01 00:00:00
计算两个日期之间相差天数 662
  • 作者:托马斯小火车喷雾又喷烟,一直喷,喷喷喷.
  • 原文链接:https://xcysj.blog.csdn.net/article/details/102479423
    更新时间:2022年11月18日09:25:31 ,共 6638 字。