java8 LocalDate LocalTime LocalDateTime ChronoUnit DateTimeFormatter TemporalAdjusters

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