import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
/**
* @author
*/
public class DateUtil {
public static void main(String[] args) {
try {
//查詢從9月1號到9月30號,星期六有幾天
System.out.println("有" + getMondayNumber("2019-09-01","2019-09-30",6) + "個"+getMonthFirstday("2019-09-08"));
} catch (ParseException e) {
e.printStackTrace();
}
}
/**
* 查詢日期間有幾天一週中的某一天
* 日期格式 yyyy-MM-dd yyyy-MM-dd 1-7(表示週一到週日)
* @param startDay 準備查詢的起始日期
* @param endDay 準備查詢的結束日期
* @param dayOfWeek 準備查的一週中的某一天(準備查周幾?)
* @return 包含所查周幾的天數
* @throws ParseException 不支持跨年查詢、不支持結束日期早於起始日期、周幾輸入錯誤等
*/
public static int getMondayNumber(String startDay,String endDay,int dayOfWeek) throws ParseException{
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
int differenceDay = 0;
//轉換起始日期
Date startDate = sdf.parse(startDay);
//轉換結束日期
Date endDate = sdf.parse(endDay);
//實例化起始和結束Calendar對象
Calendar startCalendar = Calendar.getInstance();
Calendar endCalendar = Calendar.getInstance();
//分別設置Calendar對象的時間
startCalendar.setTime(startDate);
endCalendar.setTime(endDate);
//定義起始日期和結束日期分別屬於第幾周
int startWeek = startCalendar.get(Calendar.WEEK_OF_YEAR);
int endWeek = endCalendar.get(Calendar.WEEK_OF_YEAR);
//拿到起始日期是星期幾
int startDayOfWeek = startCalendar.get(Calendar.DAY_OF_WEEK);
if(startDayOfWeek == 1) {
startDayOfWeek = 7;
startWeek--;
}else{
startDayOfWeek--;
}
//拿到結束日期是星期幾
int endDayOfWeek = endCalendar.get(Calendar.DAY_OF_WEEK);
if(endDayOfWeek == 1) {
endDayOfWeek = 7;
endWeek--;
}else{
endDayOfWeek--;
}
//計算相差的週數
int differenceWeek = endWeek - startWeek;
//開始計算
if(startDayOfWeek <= dayOfWeek) {
if(endDayOfWeek >= dayOfWeek){
differenceDay = differenceWeek + 1;
}
}if(startDayOfWeek > dayOfWeek) {
if(endDayOfWeek < dayOfWeek){
differenceDay = differenceWeek-1;
}
}else {
differenceDay = differenceWeek;
}
return differenceDay;
}
/**
* 獲取指定月份第一天
* @return
*/
public static String getMonthFirstday(String time){
int year=Integer.parseInt(time.substring(0,4));
int month=Integer.parseInt(time.substring(5,7));
SimpleDateFormat sm = new SimpleDateFormat("yyyy-MM-dd");
//獲取指定年月第一天?
Calendar calstar= Calendar.getInstance();
calstar.set(Calendar.YEAR, year);
calstar.set(Calendar.MONTH, month-1);
calstar.set(Calendar.DAY_OF_MONTH, 1);
String star =sm.format(calstar.getTime());
return star;
}
/**
* 獲取指定月份最後一天
* @return
*/
public static String getMonthlastday(String time){
SimpleDateFormat sm = new SimpleDateFormat("yyyy-MM-dd");
int year=Integer.parseInt(time.substring(0,4));
int month=Integer.parseInt(time.substring(5,7));
//獲取指定年月第一天?
Calendar calstar= Calendar.getInstance();
calstar.set(Calendar.YEAR, year);
calstar.set(Calendar.MONTH, month);
calstar.set(Calendar.DAY_OF_MONTH, 1);
//最後一天
calstar.set(Calendar.DAY_OF_MONTH, 0);
String end =sm.format(calstar.getTime());
return end;
}
}