目錄
6.計算兩個日期相差的天數
/**
* 傳入兩個日期,計算相差的天數
*
* return int 相隔的天數, 如2018-01-01 - 2018-01-02 這樣計算成兩天
* */
public static int getBeginTimeToEndTimeDays (Date beginDate, Date endDate) {
if (beginDate.getTime() > endDate.getTime()) {
throw new BusinessException("開始時間不能大於結束時間");
}
Calendar cal1 = Calendar.getInstance();
cal1.setTime(beginDate);
Calendar cal2 = Calendar.getInstance();
cal2.setTime(endDate);
int day1= cal1.get(Calendar.DAY_OF_YEAR);
int day2 = cal2.get(Calendar.DAY_OF_YEAR);
int year1 = cal1.get(Calendar.YEAR);
int year2 = cal2.get(Calendar.YEAR);
if(year1 != year2)
{
int timeDistance = 0 ;
for(int i = year1 ; i < year2 ; i ++)
{
if(i%4==0 && i%100!=0 || i%400==0)
{
timeDistance += 366;
}
else //不是閏年
{
timeDistance += 365;
}
}
return timeDistance + (day2-day1) + 1;
}
else //不同年
{
System.out.println("判斷day2 - day1 : " + (day2-day1));
return day2-day1+1;
}
}
5.返回一個月的日期列表
/**
* 獲取一個月的日期列表
*/
private List<Date> getMonthDateList (Integer year, Integer month) {
List<Date> monthDateList = new ArrayList<>();
//構造本月的開始日期
Calendar thisMonthFirst = Calendar.getInstance();
thisMonthFirst.set(year, month-1, 1);
//構造本月的結束日期
Calendar thisMonthLast = Calendar.getInstance();
thisMonthLast.setTime(thisMonthFirst.getTime());
thisMonthLast.set( Calendar.DAY_OF_MONTH, thisMonthFirst.getActualMaximum(Calendar.DAY_OF_MONTH) );
int monthBeginInr = thisMonthFirst.get(Calendar.DAY_OF_MONTH);
int monthEndInr = thisMonthLast.get(Calendar.DAY_OF_MONTH);
Calendar nowDate = Calendar.getInstance();
for (int i=monthBeginInr; i<=monthEndInr; i++) {
nowDate.set(year, month-1, i);
monthDateList.add(nowDate.getTime());
}
return monthDateList;
}
1.獲取兩個時間段之間的所有時間
/**
* 獲取兩個時間段之間的所有時間
*
* @param beginDate 開始時間
* @param endDate 結束時間
*
* @return dateList
*/
private static List<Date> getBeginToEndDateList(Date beginDate, Date endDate) {
List<Date> dateList = new ArrayList<>();
Calendar beginCalendar = Calendar.getInstance();
Calendar endCalendar = Calendar.getInstance();
beginCalendar.setTime(beginDate);
endCalendar.setTime(endDate);
//計算兩個日期相差的天數
int aa = DateUtil.getBeginTimeToEndTimeDays(beginDate, endDate);
for (int i=0; i<aa; i++) {
dateList.add(beginCalendar.getTime());
beginCalendar.add(Calendar.DAY_OF_YEAR, 1);
}
return dateList;
}
2.獲取兩個時間相差的月份數
/**
* 判斷兩個日期相差幾個月
* */
private static int getBeginToEndDateMonth(Date beginDate, Date endDate) {
int result;
Calendar startCalendar = Calendar.getInstance();
Calendar endCalendar = Calendar.getInstance();
startCalendar.setTime(beginDate);
endCalendar.setTime(endDate);
//判斷日期大小
if(startCalendar.after(endCalendar)){
Calendar temp = startCalendar;
startCalendar = endCalendar;
endCalendar = temp;
}
int startYear = startCalendar.get(Calendar.YEAR);
int endYear = endCalendar.get(Calendar.YEAR);
int startMonth = startCalendar.get(Calendar.MONTH);
int endMonth = endCalendar.get(Calendar.MONTH);
result = (endYear - startYear)*12+(endMonth-startMonth);
return result;
}
3.傳入一個時間,返回這個月的開始和結束時間
/**
* 傳入一個時間,返回這個月的開始和結束時間
* */
public static Map<String, Date> getThisMonthBeginAndEndDate(Date nowDate) {
Map<String, Date> dateMap = new HashMap<>(2);
Calendar calendar = Calendar.getInstance();
calendar.setTime(nowDate);
//構造本月的開始日期
Calendar thisMonthFirst = Calendar.getInstance();
thisMonthFirst.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), 1);
//構造本月的結束日期
Calendar thisMonthLast = Calendar.getInstance();
thisMonthLast.setTime(thisMonthFirst.getTime());
thisMonthLast.set( Calendar.DAY_OF_MONTH, thisMonthFirst.getActualMaximum(Calendar.DAY_OF_MONTH) );
dateMap.put("beginDate", thisMonthFirst.getTime());
dateMap.put("endDate", thisMonthLast.getTime());
return dateMap;
}
4.使用Calendar月份加1
public static void main(String[] args) throws Exception{
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
String dateToString = "2019-11-2";
Calendar calendar = Calendar.getInstance();
calendar.setTime(dateFormat.parse(dateToString));
for (int i=0; i<30; i++) {
calendar.add(Calendar.MONTH, +1);
System.out.println("=========>當前時間: " + dateFormat.format(calendar.getTime()));
}
}