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