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