关于日期处理,由于需要,将时间段按周、月、季划分成时间段。周是以周一为第一天进行划分
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
public class DateProcess {
public static void main(String[] args) {
String starttime = "2018-06-28";
String endtime = "2019-09-22";
Map<String,String> map = new LinkedHashMap<String,String>();
//dateWeekProcess(starttime,endtime,map);
//dateMonthProcess(starttime,endtime,map);
dateSeasonProcess(starttime,endtime,map);
System.out.println(map);
}
/**
* 将时间段拆分成一周为格式的时间段
* @param starttime
* @param endtime
* @param map
*/
public static void dateWeekProcess(String starttime, String endtime,
Map<String,String> map){
DateFormat dateFormat1 = new SimpleDateFormat("yyyy-MM-dd");
DateFormat dateFormat2 = new SimpleDateFormat("yyyy年MM月dd日");
Date startdata= null;
long enddata= 0;
long time = 0;
Date last = null;
String lastday = "";
String format = "";
//开始时间必须小于结束时间
try {
startdata = dateFormat1.parse(starttime);
Date parse = dateFormat1.parse(endtime);
enddata = parse.getTime();
format = dateFormat2.format(parse);
} catch (ParseException e) {
e.printStackTrace();
}
//开始日期
Calendar startCal = Calendar.getInstance();
startCal.setTime(startdata);
//开始时间
String firstday = dateFormat2.format(startCal.getTime());
startCal.setFirstDayOfWeek(Calendar.MONDAY); //设置每周的第一天为星期一
int i = startCal.get(Calendar.DAY_OF_WEEK)-1;
//获取当前日期的年份和第几周
int week = startCal.get(Calendar.WEEK_OF_YEAR);
int year = startCal.get(Calendar.YEAR);
//System.out.println("判断是周几:"+i);
if(i==1){
startCal.add(Calendar.DAY_OF_YEAR,6);
last = startCal.getTime();
lastday = dateFormat2.format(last);
}else if(i==0){
last = startCal.getTime();
lastday = dateFormat2.format(last);
}else{
startCal.add(Calendar.DAY_OF_YEAR,7-i);
last = startCal.getTime();
lastday = dateFormat2.format(startCal.getTime());
}
try {
time = dateFormat1.parse(dateFormat1.format(last)).getTime();
} catch (ParseException e) {
e.printStackTrace();
}
if(enddata>time){
map.put(year+"-"+week,firstday+"-"+lastday);
//System.out.println("日期格式:"+year+"-"+week+"日期时间段是:"+firstday+"-"+lastday);
startCal.add(Calendar.DAY_OF_YEAR,1);
String monday = dateFormat1.format(startCal.getTime());
//System.out.println("下个周一是:"+monday);
dateWeekProcess(monday,endtime,map);
}else{
map.put(year+"-"+week,firstday+"-"+format);
//System.out.println("日期格式:"+year+"-"+week+"日期时间段是:"+firstday+"-"+format);
}
}
/**
* 将时间段拆分成不同的月份
* @param starttime
* @param endtime
* @param dateMap
*/
public static void dateMonthProcess(String starttime, String endtime,
Map<String, String> dateMap){
DateFormat dateFormat1 = new SimpleDateFormat("yyyy-MM-dd");
DateFormat dateFormat2 = new SimpleDateFormat("yyyy年MM月");
Date startdata= null;
Date enddata= null;
long time1 = 0;
long time2 = 0;
try {
startdata = dateFormat1.parse(starttime);
enddata = dateFormat1.parse(endtime);
} catch (ParseException e) {
e.printStackTrace();
}
//开始日期
Calendar startCal = Calendar.getInstance();
startCal.setTime(startdata);
String format1 = dateFormat2.format(startCal.getTime());
int startyear = startCal.get(Calendar.YEAR);//开始时间的年份
int startmonth = startCal.get(Calendar.MONTH)+1;//开始时间的月份
startCal.add(Calendar.MONTH,1);//下一个月份
startCal.set(Calendar.DAY_OF_MONTH,1);
//将日期转换成
try {
time1= dateFormat1.parse(dateFormat1.format(startCal.getTime())).getTime();
} catch (ParseException e) {
e.printStackTrace();
}
//System.out.println(format1);
//结束日期
Calendar endCal = Calendar.getInstance();
endCal.setTime(enddata);
endCal.set(Calendar.DAY_OF_MONTH,1);
try {
time2= dateFormat1.parse(dateFormat1.format(endCal.getTime())).getTime();
} catch (ParseException e) {
e.printStackTrace();
}
dateMap.put(startyear+"-"+startmonth,format1);
if(time1<=time2){//判断时间年度和日期的大小
//System.out.println(startyear+"-"+startmonth+format1);
String format2 = dateFormat1.format(startCal.getTime());
dateMonthProcess(format2,endtime,dateMap);
}
}
/**
* 将时间段拆分成不同的季度
* @param starttime
* @param endtime
* @param dateMap
*/
public static void dateSeasonProcess(String starttime, String endtime,
Map<String, String> dateMap){
DateFormat dateFormat1 = new SimpleDateFormat("yyyy-MM-dd");
Date startdata= null;
Date enddata= null;
long time1 = 0;
long time2 = 0;
try {
startdata = dateFormat1.parse(starttime);
enddata = dateFormat1.parse(endtime);
} catch (ParseException e) {
e.printStackTrace();
}
//开始日期
Calendar startCal = Calendar.getInstance();
startCal.setTime(startdata);
int startyear = startCal.get(Calendar.YEAR);//开始时间的年份
int startSeason = getSeason(startdata);//开始时间所属季度
startCal.add(Calendar.MONTH,3);//获取下一个季度
startCal.set(Calendar.DAY_OF_MONTH,1);
try {
time1= dateFormat1.parse(dateFormat1.format(startCal.getTime())).getTime();
} catch (ParseException e) {
e.printStackTrace();
}
//System.out.println(format1);
//结束日期
Calendar endCal = Calendar.getInstance();
endCal.setTime(enddata);
endCal.set(Calendar.DAY_OF_MONTH,1);
try {
time2= dateFormat1.parse(dateFormat1.format(endCal.getTime())).getTime();
} catch (ParseException e) {
e.printStackTrace();
}
dateMap.put(startyear+"-"+startSeason,startyear+"年第"+startSeason+"季度");
if(time1<=time2){//判断时间年度和日期的大小
//System.out.println(startyear+"-"+startmonth+format1);
String format2 = dateFormat1.format(startCal.getTime());
dateSeasonProcess(format2,endtime,dateMap);
}
}
/**
* 获取季度
* @param date
* @return 季度
*/
public static int getSeason(Date date) {
int season = 0;
Calendar c = Calendar.getInstance();
c.setTime(date);
int month = c.get(Calendar.MONTH);
switch (month) {
case Calendar.JANUARY:
case Calendar.FEBRUARY:
case Calendar.MARCH:
season = 1;
break;
case Calendar.APRIL:
case Calendar.MAY:
case Calendar.JUNE:
season = 2;
break;
case Calendar.JULY:
case Calendar.AUGUST:
case Calendar.SEPTEMBER:
season = 3;
break;
case Calendar.OCTOBER:
case Calendar.NOVEMBER:
case Calendar.DECEMBER:
season = 4;
break;
default:
break;
}
return season;
}
}