不废话,直接上代码
package com.assoft.hrms.common.form;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.time.temporal.Temporal;
import java.util.Calendar;
import java.util.Date;
public class WorkYearForm {
private final String DATE_FORMAT = "yyyyMMddHHmmss";
private long year = 0;
private long month = 0;
private long day = 0;
public WorkYearForm() {
}
public WorkYearForm(long year, long month, long day) {
this.year = year;
this.month = month;
this.day = day;
}
public WorkYearForm(String startTime, String endTime) {
try {
DateTimeFormatter dtf = DateTimeFormatter.ofPattern(DATE_FORMAT);
Temporal temporal1 = LocalDate.parse(startTime, dtf);
Temporal temporal2 = LocalDate.parse(endTime, dtf);
Calendar startCalendar = time2Calendar(startTime);
Calendar endCalendar = time2Calendar(endTime);
long monthTotal = ChronoUnit.MONTHS.between(temporal1, temporal2);
int startMonthDay = loadMonthDay(startCalendar);
int startDay = startCalendar.get(Calendar.DAY_OF_MONTH);
int endDay = endCalendar.get(Calendar.DAY_OF_MONTH);
long dayCount = endDay - startDay;
if (endDay < startDay) {
dayCount = startMonthDay - startDay + endDay;
}
if (dayCount / startMonthDay > 0) {
monthTotal = monthTotal + dayCount / startMonthDay;
dayCount = dayCount % startMonthDay;
}
long yearCount = monthTotal / 12;
long monthCount = monthTotal % 12;
this.year = yearCount;
this.month = monthCount;
this.day = dayCount;
} catch (Exception e) {
e.printStackTrace();
}
}
private Calendar time2Calendar(String time) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat(this.DATE_FORMAT);
Date date = sdf.parse(time);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar;
}
private int loadMonthDay(Calendar calendar) {
int monthDay = 30;
int month = calendar.get(Calendar.MONTH) + 1;
if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) {
monthDay = 31;
} else if (month == 2) {
int year = calendar.get(Calendar.YEAR);
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
monthDay = 29;
} else {
monthDay = 28;
}
}
return monthDay;
}
public long getYear() {
return year;
}
public void setYear(long year) {
this.year = year;
}
public long getMonth() {
return month;
}
public void setMonth(long month) {
this.month = month;
}
public long getDay() {
return day;
}
public void setDay(long day) {
this.day = day;
}
}
如何使用?直接上代码
public static void main(String[] args) throws IOException, ParseException {
String startTime = "20230121000000";
String endTime = "20230301000000";
WorkYearForm workYearForm = new WorkYearForm(startTime, endTime);
long year = workYearForm.getYear();
long month = workYearForm.getMonth();
long day = workYearForm.getDay();
String str = year+"年"+month+"月"+day+"天";
System.out.println(str);
}