啪啪啪的写了一大堆,具体写的啥我也没看懂
记录一下吧,下次没准用到了翻翻自己的博客
程序员的逻辑:一步一个脚印,走完发现感觉不像自己走的
代码量很多,过程很复杂,思路很清晰,可能大佬有更简单的方法
废话不多说了,直接上代码
工具类
/**
* 用途:以指定的格式格式化日期字符串
*
* @param pattern 字符串的格式
* @param currentDate 被格式化日期
* @return String 已格式化的日期字符串
* @throws NullPointerException 如果参数为空
*/
public String formatDate(Date currentDate, String pattern) {
if (currentDate == null || "".equals(pattern) || pattern == null) {
return null;
}
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
return sdf.format(currentDate);
}
public String[] getCurrQuarter(int num) {
String[] s = new String[2];
String str = "";
// 设置本年的季
Calendar quarterCalendar = null;
switch (num) {
case 1: // 本年到现在经过了一个季度,在加上前4个季度
quarterCalendar = Calendar.getInstance();
quarterCalendar.set(Calendar.MONTH, 3);
quarterCalendar.set(Calendar.DATE, 1);
quarterCalendar.add(Calendar.DATE, -1);
str = DateUtils.formatDate(quarterCalendar.getTime(), "yyyy-MM-dd");
s[0] = str.substring(0, str.length() - 5) + "01-01";
s[1] = str;
break;
case 2: // 本年到现在经过了二个季度,在加上前三个季度
quarterCalendar = Calendar.getInstance();
quarterCalendar.set(Calendar.MONTH, 6);
quarterCalendar.set(Calendar.DATE, 1);
quarterCalendar.add(Calendar.DATE, -1);
str = DateUtils.formatDate(quarterCalendar.getTime(), "yyyy-MM-dd");
s[0] = str.substring(0, str.length() - 5) + "04-01";
s[1] = str;
break;
case 3:// 本年到现在经过了三个季度,在加上前二个季度
quarterCalendar = Calendar.getInstance();
quarterCalendar.set(Calendar.MONTH, 9);
quarterCalendar.set(Calendar.DATE, 1);
quarterCalendar.add(Calendar.DATE, -1);
str = DateUtils.formatDate(quarterCalendar.getTime(), "yyyy-MM-dd");
s[0] = str.substring(0, str.length() - 5) + "07-01";
s[1] = str;
break;
case 4:// 本年到现在经过了四个季度,在加上前一个季度
quarterCalendar = Calendar.getInstance();
quarterCalendar.add(Calendar.YEAR, -1);
quarterCalendar.set(Calendar.MONTH, 12);
quarterCalendar.set(Calendar.DATE, 1);
quarterCalendar.add(Calendar.DATE, -1);
str = DateUtils.formatDate(quarterCalendar.getTime(), "yyyy-MM-dd");
s[0] = str.substring(0, str.length() - 5) + "10-01";
s[1] = str;
break;
}
return s;
}
/**
* 获取某年第一天日期
*
* @param year 年份
* @return Date
*/
public Date getYearFirst(int year) {
Calendar calendar = Calendar.getInstance();
calendar.clear();
calendar.set(Calendar.YEAR, year);
Date currYearFirst = calendar.getTime();
return currYearFirst;
}
/**
* 获取某年最后一天日期
*
* @param year 年份
* @return Date
*/
public Date getYearLast(int year) {
Calendar calendar = Calendar.getInstance();
calendar.clear();
calendar.set(Calendar.YEAR, year);
calendar.roll(Calendar.DAY_OF_YEAR, -1);
Date currYearLast = calendar.getTime();
return currYearLast;
}
获取开始结束日期
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar cal = Calendar.getInstance();
Date startTime = null;
Date endTime = null;
//获取年
int year = cal.get(Calendar.YEAR);
//获取当前月
int month = cal.get(Calendar.MONTH) + 1;
try {
if (assessPeriod.equals("季度")) {
if (month == 1 || month == 2 || month == 3) {
String[] quarter = DateUtils.getCurrQuarter(4);
startTime = sdf.parse(quarter[0]);
endTime = sdf.parse(quarter[1]);
} else if (month == 4 || month == 5 || month == 6) {
String[] quarter = DateUtils.getCurrQuarter(1);
startTime = sdf.parse(quarter[0]);
endTime = sdf.parse(quarter[1]);
} else if (month == 7 || month == 8 || month == 9) {
String[] quarter = DateUtils.getCurrQuarter(2);
startTime = sdf.parse(quarter[0]);
endTime = sdf.parse(quarter[1]);
} else {
String[] quarter = DateUtils.getCurrQuarter(3);
startTime = sdf.parse(quarter[0]);
endTime = sdf.parse(quarter[1]);
}
}
} catch (Exception e) {
e.printStackTrace();
}
if (assessPeriod.equals("半年")) {
try {
//获取月份
if (month > 6) {
//获取上半年的第一天
startTime = DateUtils.getYearFirst(year);
endTime = sdf.parse((year) + "-06-30");
} else {
//获取去年下半年的起始日期
startTime = sdf.parse((year - 1) + "-06-30");
endTime = DateUtils.getYearLast(year - 1);
}
} catch (ParseException e) {
e.printStackTrace();
}
}
if (assessPeriod.equals("一年")) {
//获取上一周期年的第一天
startTime = DateUtils.getYearFirst(year - 1);
//获取上一周期年的最后一天
endTime = DateUtils.getYearLast(year - 1);
}