238 lines
8.4 KiB
Java
238 lines
8.4 KiB
Java
|
package cn.com.tenlion.systemtask.utils;
|
||
|
|
||
|
/**
|
||
|
* Calendar操作Date
|
||
|
* @author renpc
|
||
|
*/
|
||
|
import java.text.SimpleDateFormat;
|
||
|
import java.util.Calendar;
|
||
|
import java.util.Date;
|
||
|
|
||
|
|
||
|
public class DateUtils {
|
||
|
|
||
|
/**设置初始值*/
|
||
|
private static Calendar cal;
|
||
|
|
||
|
/**
|
||
|
* 根据当前系统时区定义Calendar
|
||
|
*/
|
||
|
static {
|
||
|
cal = Calendar.getInstance();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 获取date的月份的时间范围
|
||
|
* @param date
|
||
|
* @return
|
||
|
*/
|
||
|
public static DateRange getMonthRange(Date date) {
|
||
|
Calendar startCalendar = Calendar.getInstance();
|
||
|
startCalendar.setTime(date);
|
||
|
startCalendar.set(Calendar.DAY_OF_MONTH, 1);
|
||
|
setMaxTime(startCalendar);
|
||
|
|
||
|
Calendar endCalendar = Calendar.getInstance();
|
||
|
endCalendar.setTime(date);
|
||
|
endCalendar.set(Calendar.DAY_OF_MONTH, endCalendar.getActualMaximum(Calendar.DAY_OF_MONTH));
|
||
|
setMaxTime(endCalendar);
|
||
|
|
||
|
return new DateRange(startCalendar.getTime(), endCalendar.getTime());
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 根据指定日期获取当前属于第几个季度
|
||
|
* @param date
|
||
|
*/
|
||
|
public static int getNowQuarter(Date date){
|
||
|
cal.setTime(date);
|
||
|
int month = cal.get(Calendar.MONTH) + 1;
|
||
|
int quarter = 0;
|
||
|
//判断季度
|
||
|
if (month >= 1 && month <= 3) {
|
||
|
quarter = 1;
|
||
|
} else if (month >= 4 && month <= 6) {
|
||
|
quarter = 2;
|
||
|
} else if (month >= 7 && month <= 9) {
|
||
|
quarter = 3;
|
||
|
} else {
|
||
|
quarter = 4;
|
||
|
}
|
||
|
return quarter;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 获取当前季度的时间范围
|
||
|
* @return current quarter
|
||
|
*/
|
||
|
public static DateRange returnQuarterCurrent(int year, int quarter) {
|
||
|
Calendar startCalendar = Calendar.getInstance();
|
||
|
Calendar endCalendar = Calendar.getInstance();
|
||
|
if(quarter == 1) {
|
||
|
startCalendar.set(year, 1-1, 1, 00, 00, 00);
|
||
|
endCalendar.set(year, 3-1,31, 23,59,59);
|
||
|
}else if(quarter == 2) {
|
||
|
startCalendar.set(year, 4-1, 1, 00, 00, 00);
|
||
|
endCalendar.set(year, 6-1,30, 23,59,59);
|
||
|
}else if(quarter == 3) {
|
||
|
startCalendar.set(year, 7-1, 1, 00, 00, 00);
|
||
|
endCalendar.set(year, 9-1,30, 23,59,59);
|
||
|
}else {
|
||
|
startCalendar.set(year, 10-1, 1, 00, 00, 00);
|
||
|
endCalendar.set(year, 12-1,31, 23,59,59);
|
||
|
}
|
||
|
return new DateRange(startCalendar.getTime(), endCalendar.getTime());
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 获取当前季度的时间范围
|
||
|
* @return current quarter
|
||
|
*/
|
||
|
public static DateRange getThisQuarter(int quarter) {
|
||
|
Calendar startCalendar = Calendar.getInstance();
|
||
|
startCalendar.set(Calendar.MONTH, ((int) startCalendar.get(Calendar.MONTH) / 3) * 3);
|
||
|
startCalendar.set(Calendar.DAY_OF_MONTH, 1);
|
||
|
setMinTime(startCalendar);
|
||
|
|
||
|
Calendar endCalendar = Calendar.getInstance();
|
||
|
endCalendar.set(Calendar.MONTH, ((int) startCalendar.get(Calendar.MONTH) / 3) * 3 + 2);
|
||
|
endCalendar.set(Calendar.DAY_OF_MONTH, endCalendar.getActualMaximum(Calendar.DAY_OF_MONTH));
|
||
|
setMaxTime(endCalendar);
|
||
|
|
||
|
return new DateRange(startCalendar.getTime(), endCalendar.getTime());
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 获取昨天的时间范围
|
||
|
* @return
|
||
|
*/
|
||
|
public static DateRange getYesterdayRange() {
|
||
|
Calendar startCalendar = Calendar.getInstance();
|
||
|
startCalendar.add(Calendar.DAY_OF_MONTH, -1);
|
||
|
setMinTime(startCalendar);
|
||
|
|
||
|
Calendar endCalendar = Calendar.getInstance();
|
||
|
endCalendar.add(Calendar.DAY_OF_MONTH, -1);
|
||
|
setMaxTime(endCalendar);
|
||
|
|
||
|
return new DateRange(startCalendar.getTime(), endCalendar.getTime());
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 获取当前月份的时间范围
|
||
|
* @return
|
||
|
*/
|
||
|
public static DateRange getThisMonth(){
|
||
|
Calendar startCalendar = Calendar.getInstance();
|
||
|
startCalendar.set(Calendar.DAY_OF_MONTH, 1);
|
||
|
setMinTime(startCalendar);
|
||
|
|
||
|
Calendar endCalendar = Calendar.getInstance();
|
||
|
endCalendar.set(Calendar.DAY_OF_MONTH, endCalendar.getActualMaximum(Calendar.DAY_OF_MONTH));
|
||
|
setMaxTime(endCalendar);
|
||
|
|
||
|
return new DateRange(startCalendar.getTime(), endCalendar.getTime());
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 获取上个月的时间范围
|
||
|
* @return
|
||
|
*/
|
||
|
public static DateRange getLastMonth(){
|
||
|
Calendar startCalendar = Calendar.getInstance();
|
||
|
startCalendar.add(Calendar.MONTH, -1);
|
||
|
startCalendar.set(Calendar.DAY_OF_MONTH, 1);
|
||
|
setMinTime(startCalendar);
|
||
|
|
||
|
Calendar endCalendar = Calendar.getInstance();
|
||
|
endCalendar.add(Calendar.MONTH, -1);
|
||
|
endCalendar.set(Calendar.DAY_OF_MONTH, endCalendar.getActualMaximum(Calendar.DAY_OF_MONTH));
|
||
|
setMaxTime(endCalendar);
|
||
|
|
||
|
return new DateRange(startCalendar.getTime(), endCalendar.getTime());
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 获取指定月的时间范围
|
||
|
* month:-1是前一个月,-2是前二个月。+1是推后一个月。以此类推
|
||
|
* @return
|
||
|
*/
|
||
|
public static DateRange getAppointMonth(int month){
|
||
|
Calendar startCalendar = Calendar.getInstance();
|
||
|
startCalendar.add(Calendar.MONTH, month);
|
||
|
startCalendar.set(Calendar.DAY_OF_MONTH, 1);
|
||
|
setMinTime(startCalendar);
|
||
|
|
||
|
Calendar endCalendar = Calendar.getInstance();
|
||
|
endCalendar.add(Calendar.MONTH, month);
|
||
|
endCalendar.set(Calendar.DAY_OF_MONTH, endCalendar.getActualMaximum(Calendar.DAY_OF_MONTH));
|
||
|
setMaxTime(endCalendar);
|
||
|
|
||
|
return new DateRange(startCalendar.getTime(), endCalendar.getTime());
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 获取上个季度的时间范围
|
||
|
* @return
|
||
|
*/
|
||
|
public static DateRange getLastQuarter() {
|
||
|
Calendar startCalendar = Calendar.getInstance();
|
||
|
startCalendar.set(Calendar.MONTH, ((int) startCalendar.get(Calendar.MONTH) / 3 - 1) * 3);
|
||
|
startCalendar.set(Calendar.DAY_OF_MONTH, 1);
|
||
|
setMinTime(startCalendar);
|
||
|
|
||
|
Calendar endCalendar = Calendar.getInstance();
|
||
|
endCalendar.set(Calendar.MONTH, ((int) endCalendar.get(Calendar.MONTH) / 3 - 1) * 3 + 2);
|
||
|
endCalendar.set(Calendar.DAY_OF_MONTH, endCalendar.getActualMaximum(Calendar.DAY_OF_MONTH));
|
||
|
setMaxTime(endCalendar);
|
||
|
|
||
|
return new DateRange(startCalendar.getTime(), endCalendar.getTime());
|
||
|
}
|
||
|
|
||
|
private static void setMinTime(Calendar calendar){
|
||
|
calendar.set(Calendar.HOUR_OF_DAY, 0);
|
||
|
calendar.set(Calendar.MINUTE, 0);
|
||
|
calendar.set(Calendar.SECOND, 0);
|
||
|
calendar.set(Calendar.MILLISECOND, 0);
|
||
|
}
|
||
|
|
||
|
private static void setMaxTime(Calendar calendar){
|
||
|
calendar.set(Calendar.HOUR_OF_DAY, calendar.getActualMaximum(Calendar.HOUR_OF_DAY));
|
||
|
calendar.set(Calendar.MINUTE, calendar.getActualMaximum(Calendar.MINUTE));
|
||
|
calendar.set(Calendar.SECOND, calendar.getActualMaximum(Calendar.SECOND));
|
||
|
calendar.set(Calendar.MILLISECOND, calendar.getActualMaximum(Calendar.MILLISECOND));
|
||
|
}
|
||
|
|
||
|
|
||
|
public final static String DEFAULT_PATTERN = "MM/dd/yyyy HH:mm:ss";
|
||
|
public static String format(Date date){
|
||
|
SimpleDateFormat sdf = new SimpleDateFormat(DEFAULT_PATTERN);
|
||
|
return sdf.format(date);
|
||
|
}
|
||
|
|
||
|
public static void main(String[] args) {
|
||
|
|
||
|
//DateRange currentQuarter = getThisQuarter();
|
||
|
//System.out.println("当前季度的时间范围: "+DateUtilsTemp.format(currentQuarter.getStart())+" - "+DateUtilsTemp.format(currentQuarter.getEnd()));
|
||
|
|
||
|
|
||
|
DateRange yesterdayRange = getYesterdayRange();
|
||
|
//System.out.println("昨天的时间范围: "+DateUtilsTemp.format(yesterdayRange.getStart())+" - "+DateUtilsTemp.format(yesterdayRange.getEnd()));
|
||
|
|
||
|
DateRange thisMonth = getThisMonth();
|
||
|
//System.out.println("当前月份的时间范围: "+DateUtilsTemp.format(thisMonth.getStart())+" - "+DateUtilsTemp.format(thisMonth.getEnd()));
|
||
|
|
||
|
DateRange lastMonth = getLastMonth();
|
||
|
//System.out.println("上个月的时间范围: "+DateUtilsTemp.format(lastMonth.getStart())+" - "+DateUtilsTemp.format(lastMonth.getEnd()));
|
||
|
|
||
|
DateRange lastQuarter = getLastQuarter();
|
||
|
//System.out.println("上个季度的时间范围: "+DateUtilsTemp.format(lastQuarter.getStart())+" - "+DateUtilsTemp.format(lastQuarter.getEnd()));
|
||
|
|
||
|
DateRange dateRange = returnQuarterCurrent(2020, 5);
|
||
|
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
||
|
System.out.println(df.format(dateRange.getStart()));
|
||
|
System.out.println(df.format(dateRange.getEnd()));
|
||
|
|
||
|
|
||
|
}
|
||
|
}
|