|
@@ -25,6 +25,24 @@ public class DateUtils extends PropertyEditorSupport {
|
|
|
private static final long MINUTE_IN_MILLIS = 60 * 1000;
|
|
|
private static final long SECOND_IN_MILLIS = 1000;
|
|
|
|
|
|
+ public static String getDateByDateStr(String dateStr) throws ParseException {
|
|
|
+ SimpleDateFormat dsdf = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
+ Date parse = dsdf.parse(dateStr);
|
|
|
+ String day = dsdf.format(parse);
|
|
|
+ return day;
|
|
|
+ }
|
|
|
+
|
|
|
+ public static Integer getHour(String dateStr) throws ParseException {
|
|
|
+ DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
+ Calendar cal = Calendar.getInstance();
|
|
|
+ Date date = sdf.parse(dateStr);
|
|
|
+ cal.setTime(date);
|
|
|
+ Integer hour = cal.get(Calendar.HOUR_OF_DAY);
|
|
|
+ return hour;
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 指定模式的时间格式
|
|
|
*
|
|
@@ -576,6 +594,7 @@ public class DateUtils extends PropertyEditorSupport {
|
|
|
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
return dateFormat.format(getDate);
|
|
|
}
|
|
|
+
|
|
|
/**
|
|
|
* String类型 转换为Date, 如果参数长度为10 转换格式”yyyy-MM-dd“ 如果参数长度为19 转换格式”yyyy-MM-dd
|
|
|
* HH:mm:ss“ * @param text String类型的时间值
|
|
@@ -904,21 +923,22 @@ public class DateUtils extends PropertyEditorSupport {
|
|
|
/**
|
|
|
* 根据时间获取季度
|
|
|
* 1即Q1(1,2,3月),以此类推
|
|
|
+ *
|
|
|
* @param date
|
|
|
* @return
|
|
|
*/
|
|
|
- public static int getQuarter(Date date){
|
|
|
+ public static int getQuarter(Date date) {
|
|
|
Calendar cal = Calendar.getInstance();
|
|
|
cal.setTime(date);
|
|
|
//获取当前月份
|
|
|
int month = cal.get(Calendar.MONTH) + 1;
|
|
|
- if(month<=3){
|
|
|
+ if (month <= 3) {
|
|
|
return 1;
|
|
|
- }else if(month <=6){
|
|
|
+ } else if (month <= 6) {
|
|
|
return 2;
|
|
|
- }else if(month<=9){
|
|
|
+ } else if (month <= 9) {
|
|
|
return 3;
|
|
|
- }else if(month<=12){
|
|
|
+ } else if (month <= 12) {
|
|
|
return 4;
|
|
|
}
|
|
|
|
|
@@ -927,9 +947,10 @@ public class DateUtils extends PropertyEditorSupport {
|
|
|
|
|
|
/**
|
|
|
* 获取【所在周】周五的时间(周五为一周第一天,周四为一周最后一天)
|
|
|
+ *
|
|
|
* @param date
|
|
|
*/
|
|
|
- public static Date getFriday(Date date){
|
|
|
+ public static Date getFriday(Date date) {
|
|
|
Calendar calendar = new GregorianCalendar();
|
|
|
calendar.setTime(date);
|
|
|
calendar.setFirstDayOfWeek(Calendar.FRIDAY);
|
|
@@ -943,8 +964,8 @@ public class DateUtils extends PropertyEditorSupport {
|
|
|
* 获取传入时间的年、月份和季度(周五为每周第一天,周四为每周最后一天)
|
|
|
* 获取的是所属年、月、季度,因为很多月份的第一周或最后 一周会包括上一个月或者下一个月的部分日期
|
|
|
*/
|
|
|
- public static Map<String,Integer> getYearQuarter(Date date){
|
|
|
- Map<String,Integer> dateMap = new HashMap<>();
|
|
|
+ public static Map<String, Integer> getYearQuarter(Date date) {
|
|
|
+ Map<String, Integer> dateMap = new HashMap<>();
|
|
|
|
|
|
Calendar calendar = new GregorianCalendar();
|
|
|
calendar.setTime(date);
|
|
@@ -971,63 +992,63 @@ public class DateUtils extends PropertyEditorSupport {
|
|
|
int thursdayQuarter = DateUtils.getQuarter(calendar2.getTime());
|
|
|
|
|
|
//如果本周第一天(周五)和当前天不在一个月内,说明周跨月了
|
|
|
- if(fridayMonth == originMonth && thursdayMonth == originMonth){
|
|
|
+ if (fridayMonth == originMonth && thursdayMonth == originMonth) {
|
|
|
dateMap.put("year", originYear);
|
|
|
dateMap.put("month", originMonth + 1); //最后一个月是11,应该+1
|
|
|
dateMap.put("quarter", originQuarter);
|
|
|
return dateMap;
|
|
|
- }else if(fridayYear < originYear || (fridayYear ==originYear && fridayMonth < originMonth) ){
|
|
|
+ } else if (fridayYear < originYear || (fridayYear == originYear && fridayMonth < originMonth)) {
|
|
|
//判断本周有几天在本月,如果是(5,6,7)则就是本月本季度
|
|
|
//int lastDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
|
|
|
calendar1.set(Calendar.DATE, calendar1.getActualMaximum(Calendar.DATE));
|
|
|
int lastDateWeek = calendar1.get(Calendar.DAY_OF_WEEK);
|
|
|
//判断如果本周所在上个月的最后一天是周五、周六、周日的话,说明本周归属于本月(周五是第一天);否则本周归属于上个季度
|
|
|
- if(lastDateWeek ==6 || lastDateWeek ==7 || lastDateWeek ==1 ){
|
|
|
+ if (lastDateWeek == 6 || lastDateWeek == 7 || lastDateWeek == 1) {
|
|
|
dateMap.put("year", originYear);
|
|
|
dateMap.put("month", originMonth + 1);
|
|
|
- dateMap.put("quarter",originQuarter);
|
|
|
- }else{
|
|
|
+ dateMap.put("quarter", originQuarter);
|
|
|
+ } else {
|
|
|
//判断如果本周属于上个月,判断是否跨年
|
|
|
- if(originYear == fridayYear){
|
|
|
+ if (originYear == fridayYear) {
|
|
|
dateMap.put("year", originYear);
|
|
|
dateMap.put("month", originMonth);
|
|
|
//判断是否跨季
|
|
|
- if(originQuarter == fridayQuarter){
|
|
|
- dateMap.put("quarter",originQuarter);
|
|
|
- }else{
|
|
|
- dateMap.put("quarter",fridayQuarter);
|
|
|
+ if (originQuarter == fridayQuarter) {
|
|
|
+ dateMap.put("quarter", originQuarter);
|
|
|
+ } else {
|
|
|
+ dateMap.put("quarter", fridayQuarter);
|
|
|
}
|
|
|
- }else{
|
|
|
+ } else {
|
|
|
//跨年的话说明这周上年的12月(第四季度)
|
|
|
- dateMap.put("year", originYear-1);
|
|
|
+ dateMap.put("year", originYear - 1);
|
|
|
dateMap.put("month", 12); //??查看是11,还是12
|
|
|
- dateMap.put("quarter",4);
|
|
|
+ dateMap.put("quarter", 4);
|
|
|
}
|
|
|
}
|
|
|
return dateMap;
|
|
|
- }else if(originYear < thursdayYear || (originYear == thursdayYear && originMonth < thursdayMonth) ){
|
|
|
+ } else if (originYear < thursdayYear || (originYear == thursdayYear && originMonth < thursdayMonth)) {
|
|
|
calendar2.set(Calendar.DATE, 1);
|
|
|
int firstDateWeek = calendar2.get(Calendar.DAY_OF_WEEK);
|
|
|
//如果跨月的第一天是周二周三周四的话说明这周不跨月,否在进入下个月(季度、年需要再判断)
|
|
|
- if( firstDateWeek==3 || firstDateWeek==4 || firstDateWeek==5){
|
|
|
+ if (firstDateWeek == 3 || firstDateWeek == 4 || firstDateWeek == 5) {
|
|
|
dateMap.put("year", originYear);
|
|
|
- dateMap.put("month", originMonth+1);
|
|
|
- dateMap.put("quarter",originQuarter);
|
|
|
- }else{
|
|
|
- if( originYear == thursdayYear ){
|
|
|
+ dateMap.put("month", originMonth + 1);
|
|
|
+ dateMap.put("quarter", originQuarter);
|
|
|
+ } else {
|
|
|
+ if (originYear == thursdayYear) {
|
|
|
dateMap.put("year", originYear);
|
|
|
dateMap.put("month", originMonth + 1 + 1);
|
|
|
//判断是否跨季
|
|
|
- if(originQuarter == thursdayQuarter){
|
|
|
- dateMap.put("quarter",originQuarter);
|
|
|
- }else{
|
|
|
- dateMap.put("quarter",thursdayQuarter);
|
|
|
+ if (originQuarter == thursdayQuarter) {
|
|
|
+ dateMap.put("quarter", originQuarter);
|
|
|
+ } else {
|
|
|
+ dateMap.put("quarter", thursdayQuarter);
|
|
|
}
|
|
|
- }else{
|
|
|
+ } else {
|
|
|
//跨年的话说明这周属于明年的1月(第一季度)
|
|
|
- dateMap.put("year", originYear+1);
|
|
|
+ dateMap.put("year", originYear + 1);
|
|
|
dateMap.put("month", 1);
|
|
|
- dateMap.put("quarter",1);
|
|
|
+ dateMap.put("quarter", 1);
|
|
|
}
|
|
|
}
|
|
|
return dateMap;
|
|
@@ -1038,11 +1059,12 @@ public class DateUtils extends PropertyEditorSupport {
|
|
|
/**
|
|
|
* 计算季度开始、结束时间
|
|
|
* 原则:周五为本周的第一天,下一周的周四为本周的最后一天
|
|
|
+ *
|
|
|
* @param year
|
|
|
* @param quarter
|
|
|
*/
|
|
|
- public static Map<String,String> quarterStartEndDate(int year, int quarter){
|
|
|
- Map<String,String> quarterStartEndDateMap = new HashMap<>();
|
|
|
+ public static Map<String, String> quarterStartEndDate(int year, int quarter) {
|
|
|
+ Map<String, String> quarterStartEndDateMap = new HashMap<>();
|
|
|
|
|
|
Date startDate = null;
|
|
|
Date endDate = null;
|
|
@@ -1050,51 +1072,51 @@ public class DateUtils extends PropertyEditorSupport {
|
|
|
int startMonth = 0;
|
|
|
int endMonth = 0;
|
|
|
|
|
|
- if(quarter == 1){
|
|
|
+ if (quarter == 1) {
|
|
|
startMonth = 1;
|
|
|
endMonth = 3;
|
|
|
- }else if(quarter == 2){
|
|
|
+ } else if (quarter == 2) {
|
|
|
startMonth = 4;
|
|
|
endMonth = 6;
|
|
|
- }else if(quarter == 3){
|
|
|
+ } else if (quarter == 3) {
|
|
|
startMonth = 7;
|
|
|
endMonth = 9;
|
|
|
- }else{
|
|
|
+ } else {
|
|
|
startMonth = 10;
|
|
|
endMonth = 12;
|
|
|
}
|
|
|
|
|
|
//判断季度第一天的时间(以周为单位,有可能是上个月,也有可能是本月的非1号)
|
|
|
Calendar calendar1 = new GregorianCalendar();
|
|
|
- calendar1.set(Calendar.YEAR,year);
|
|
|
- calendar1.set(Calendar.MONTH,startMonth-1);
|
|
|
- calendar1.set(Calendar.DATE,1);
|
|
|
+ calendar1.set(Calendar.YEAR, year);
|
|
|
+ calendar1.set(Calendar.MONTH, startMonth - 1);
|
|
|
+ calendar1.set(Calendar.DATE, 1);
|
|
|
calendar1.setFirstDayOfWeek(Calendar.FRIDAY);
|
|
|
|
|
|
//如果季度第一个月的第一天是周二周三周四,那么这周应该归属于上个季度,否则这周(包括上个月的时间)归属于这个季度
|
|
|
int firstDateWeek = calendar1.get(Calendar.DAY_OF_WEEK);
|
|
|
- if(firstDateWeek ==5 || firstDateWeek ==3 || firstDateWeek ==4 ){
|
|
|
+ if (firstDateWeek == 5 || firstDateWeek == 3 || firstDateWeek == 4) {
|
|
|
calendar1.set(Calendar.DAY_OF_WEEK, Calendar.THURSDAY);
|
|
|
- startDate = DateUtils.addDay(calendar1.getTime(),1);
|
|
|
- }else{
|
|
|
+ startDate = DateUtils.addDay(calendar1.getTime(), 1);
|
|
|
+ } else {
|
|
|
calendar1.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY);
|
|
|
startDate = calendar1.getTime();
|
|
|
}
|
|
|
|
|
|
//判断季度最后一天的时间(以周为单位,有可能是下个月,也有可能是本月的非最后一天)
|
|
|
Calendar calendar2 = new GregorianCalendar();
|
|
|
- calendar2.set(Calendar.YEAR,year);
|
|
|
- calendar2.set(Calendar.MONTH,endMonth-1);
|
|
|
- calendar2.set(Calendar.DATE,1);
|
|
|
+ calendar2.set(Calendar.YEAR, year);
|
|
|
+ calendar2.set(Calendar.MONTH, endMonth - 1);
|
|
|
+ calendar2.set(Calendar.DATE, 1);
|
|
|
calendar2.setFirstDayOfWeek(Calendar.FRIDAY);
|
|
|
|
|
|
//如果一个季度最后一个月最后一天是周五、周六、周日,则这个月最后一周属于下个季度
|
|
|
calendar2.set(Calendar.DATE, calendar2.getActualMaximum(Calendar.DATE));
|
|
|
int lastDateWeek = calendar2.get(Calendar.DAY_OF_WEEK);
|
|
|
- if(lastDateWeek ==1 || lastDateWeek ==7 || lastDateWeek ==6){
|
|
|
+ if (lastDateWeek == 1 || lastDateWeek == 7 || lastDateWeek == 6) {
|
|
|
calendar2.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY);
|
|
|
- endDate = DateUtils.addDay(calendar2.getTime(),-1);
|
|
|
- }else{
|
|
|
+ endDate = DateUtils.addDay(calendar2.getTime(), -1);
|
|
|
+ } else {
|
|
|
calendar2.set(Calendar.DAY_OF_WEEK, Calendar.THURSDAY);
|
|
|
endDate = calendar2.getTime();
|
|
|
}
|
|
@@ -1118,16 +1140,15 @@ public class DateUtils extends PropertyEditorSupport {
|
|
|
//Date effiStart = DateUtils.addDay(friDay, -15);
|
|
|
//System.out.println(sdf.format(effiStart));
|
|
|
|
|
|
- Map<String,Integer> map1 = DateUtils.getYearQuarter(DateUtils.parseDate("2020-04-01","yyyy-MM-dd"));
|
|
|
+ Map<String, Integer> map1 = DateUtils.getYearQuarter(DateUtils.parseDate("2020-04-01", "yyyy-MM-dd"));
|
|
|
|
|
|
- Map<String,String> map2 = DateUtils.quarterStartEndDate(2019,1);
|
|
|
+ Map<String, String> map2 = DateUtils.quarterStartEndDate(2019, 1);
|
|
|
|
|
|
- for(String key:map2.keySet()){
|
|
|
+ for (String key : map2.keySet()) {
|
|
|
System.out.println(key + ":" + map2.get(key));
|
|
|
}
|
|
|
|
|
|
|
|
|
-
|
|
|
}
|
|
|
|
|
|
}
|