JAVA日期
LocalDate和LocalTime
二、一些时间方法的基本实现
public class DateUtil {
//变成LocalDate类型
public static LocalDate tranStrToLocalDate(String date,String formatter){
return LocalDate.parse(date, DateTimeFormatter.ofPattern(formatter));
}
public static String tranLocalDateToStr(LocalDate date,String formatter){
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(formatter);
return date.format(dateTimeFormatter);
}
//获取两个日期差
public static int getBetweenDays(LocalDate startDate,LocalDate endDate){
return (int)startDate.until(endDate, ChronoUnit.DAYS);
}
//获取当天
public static LocalDate getToday(){
return LocalDate.now();
}
//获取日期的当月第一天
public static LocalDate getFirstDayOfMonth(LocalDate date){
return date.with(TemporalAdjusters.firstDayOfMonth());
}
//获取日期的当月最后一天
public static LocalDate getLastDayOfMonth(LocalDate date){
return date.with(TemporalAdjusters.lastDayOfMonth());
}
//获取日期的下个月第一天
public static LocalDate getFirstDayOfNextMonth(LocalDate date){
return date.with(TemporalAdjusters.firstDayOfNextMonth());
}
//获取日期的上个月最后一天
public static LocalDate getLastDayOfLastMonth(LocalDate date){
return date.with(TemporalAdjusters.firstDayOfMonth()).plusDays(-1);
}
//获取日期所在季度的第一天
public static LocalDate getFirstDayOfQuarter(LocalDate date) {
int month = date.getMonth().getValue();
switch(month){
case 1:case 4:case 7: case 10:
return getFirstDayOfMonth(date);
case 2: case 5:case 8:case 11:
return getFirstDayOfMonth(date.plusMonths(-1));
case 3:case 6:case 9:case 12:
return getFirstDayOfMonth(date.plusMonths(-2));
default:
return date;
}
}
//获取季度的最后一天
public static LocalDate getLastDayOfQuarter(LocalDate date) {
int month = date.getMonth().getValue();
switch(month){
case 1:case 4:case 7: case 10:
return getLastDayOfMonth(date.plusMonths(+1));
case 2: case 5:case 8:case 11:
return getLastDayOfMonth(date.plusMonths(+2));
case 3:case 6:case 9:case 12:
return getLastDayOfMonth(date);
default:
return date;
}
}
//获取日期的当年第一天
public static LocalDate getFirstDayOfYear(LocalDate date){
return date.with(TemporalAdjusters.firstDayOfYear());
}
//获取日期的当年最后一天
public static LocalDate getLastDayOfYear(LocalDate date){
return date.with(TemporalAdjusters.lastDayOfYear());
}
//LocalDate转Date
public static LocalDate transToLocalDate(Date date){
Instant instant = date.toInstant();
ZoneId zoneId = ZoneId.systemDefault();
return instant.atZone(zoneId).toLocalDate();
}
//Date转LocalDate
public static Date transToDate(LocalDate date){
ZoneId zone = ZoneId.systemDefault();
Instant instant = date.atStartOfDay().atZone(zone).toInstant();
return Date.from(instant);
}
//两个日期间隔的月
public static int getMonth(LocalDate dateStart,LocalDate dateEnd){
Date start = transToDate(dateStart);
Date end = transToDate(dateEnd);
if (start.after(end)) {
Date t = start;
start = end;
end = t;
}
Calendar startCalendar = Calendar.getInstance();
startCalendar.setTime(start);
Calendar endCalendar = Calendar.getInstance();
endCalendar.setTime(end);
Calendar temp = Calendar.getInstance();
temp.setTime(end);
temp.add(Calendar.DATE, 1);
int year = endCalendar.get(Calendar.YEAR) - startCalendar.get(Calendar.YEAR);
int month = endCalendar.get(Calendar.MONTH) - startCalendar.get(Calendar.MONTH);
if ((startCalendar.get(Calendar.DATE) == 1)&& (temp.get(Calendar.DATE) == 1)) {
return year * 12 + month + 1;
} else if ((startCalendar.get(Calendar.DATE) != 1) && (temp.get(Calendar.DATE) == 1)) {
return year * 12 + month;
} else if ((startCalendar.get(Calendar.DATE) == 1) && (temp.get(Calendar.DATE) != 1)) {
return year * 12 + month;
} else {
return (year * 12 + month - 1) < 0 ? 0 : (year * 12 + month);
}
}
//两个日期间隔的年
public static int getYear(LocalDate dateStart,LocalDate dateEnd){
Date start = transToDate(dateStart);
Date end = transToDate(dateEnd);
if (start.after(end)) {
Date t = start;
start = end;
end = t;
}
Calendar startCalendar = Calendar.getInstance();
startCalendar.setTime(start);
Calendar endCalendar = Calendar.getInstance();
endCalendar.setTime(end);
Calendar temp = Calendar.getInstance();
temp.setTime(end);
temp.add(Calendar.DATE, 1);
return endCalendar.get(Calendar.YEAR) - startCalendar.get(Calendar.YEAR);
}
//获取当前月份所在季度
public static int getQuarter(LocalDate date){
int month = date.getMonth().getValue();
switch(month){
case 1: case 2: case 3:
return 1;
case 4: case 5: case 6:
return 2;
case 7: case 8: case 9:
return 3;
case 10: case 11: case 12:
return 4;
default: return 0;
}
}
//是否是月的第一天
public static boolean ifFirstDayOfMonth(LocalDate date){
return date.getDayOfMonth()==1;
}
//是否是月的最后一天
public static boolean ifLastDayOfMonth(LocalDate date){
return date.getDayOfMonth()==getLastDayOfMonth(date).getDayOfMonth();
}
//是否是年的第一天
public static boolean ifFirstDayOfYear(LocalDate date){
return date.getDayOfYear()==1;
}
//是否是年的最后一天
public static boolean ifLastDayOfYear(LocalDate date){
return date.getDayOfYear()==getLastDayOfYear(date).getDayOfMonth();
}
//是否是季度的最后一天
public static boolean ifLastDayOfQuarter(LocalDate date) {
int month = date.getMonth().getValue();
if(month==3||month==6||month==9||month==12){
return date.getDayOfMonth()==1;
}
return false;
}
//是否是季度的第一天
public static boolean ifFirstDayOfQuarter(LocalDate date) {
int month = date.getMonth().getValue();
if(month==1||month==4||month==7||month==10){
return date.getDayOfMonth()==getLastDayOfMonth(date).getDayOfMonth();
}
return false;
}
//两个季度期间首尾中日期间隔的季度
public static int getQuarter(LocalDate dateStart, LocalDate dateEnd) {
return getMonth(dateStart, dateEnd)/4;
}
}