import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class DateUtils {
/**年*/
public static final int YEAR_RETURN = 0;
/**月*/
public static final int MONTH_RETURN = 1;
/**日*/
public static final int DAY_RETURN = 2;
/**时*/
public static final int HOUR_RETURN= 3;
/**分*/
public static final int MINUTE_RETURN = 4;
/**秒*/
public static final int SECOND_RETURN = 5;
/**周*/
public static final int WEEK_RETURN = 6;
/**季度*/
public static final int QUARTER_RETURN = 7;
/**年*/
public static final String YYYY = "yyyy";
/**年-月*/
public static final String YYYYMM = "yyyy-MM";
/**年-月-日*/
public static final String YYYYMMDD = "yyyy-MM-dd";
/**年-月-日-时*/
public static final String YYYYMMDDHH= "yyyy-MM-dd HH";
/**年-月-日-时-分*/
public static final String YYYYMMDDHHMM = "yyyy-MM-dd HH:mm";
/**年-月-日-时-分-秒*/
public static final String YYYYMMDDHHMMSS = "yyyy-MM-dd HH:mm:ss";
/**
* 获取某个时间指定间隔前后的日期(间隔单位年月日周等),以结束日期倒推补全
* @param startDate 开始日期YYYYMMDD
* @param endDate 结束日期YYYYMMDD
* @param type 间隔类型
* 以结束日期向前推间隔 日期
* @return 日期数组YYYYMMDD
*/
public static String[] calendarData(String startDate,String endDate,String type) throws ParseException {
Integer y = Integer.parseInt(endDate.substring(0, endDate.length()-6));
Integer m = Integer.parseInt(endDate.substring(5, endDate.length()-3));
Integer d = Integer.parseInt(endDate.substring(8, endDate.length()));
Calendar calendar = Calendar.getInstance();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
String[] interval=null;
if(type.equals("ByYear")){
//获取时间间隔了多少年
Integer between = Integer.parseInt(String.valueOf(DateUtils.getBetween(startDate, endDate, DateUtils.YYYYMMDD, DateUtils.YEAR_RETURN)));
interval=new String[between];
for (Integer i = 1; i <= between; i++) {
calendar.set(y,m-1,d);
calendar.add(Calendar.YEAR, -i);
interval[i-1]=simpleDateFormat.format(calendar.getTime());
}
}
if(type.equals("ByMonth")){
//获取时间间隔了多少月
Integer between = Integer.parseInt(String.valueOf(DateUtils.getBetween(startDate, endDate, DateUtils.YYYYMMDD, DateUtils.MONTH_RETURN)));
interval=new String[between];
for (Integer i = 1; i <= between; i++) {
calendar.set(y,m-1,d);
calendar.add(Calendar.MONTH, -i);
interval[i-1]=simpleDateFormat.format(calendar.getTime());
}
}
if(type.equals("ByDay")){
//获取时间间隔了多少日
Integer between = Integer.parseInt(String.valueOf(DateUtils.getBetween(startDate, endDate, DateUtils.YYYYMMDD, DateUtils.DAY_RETURN)));
interval=new String[between];
for (Integer i = 1; i <= between; i++) {
calendar.set(y,m-1,d);
calendar.add(Calendar.DATE, -i);
interval[i-1]=simpleDateFormat.format(calendar.getTime());
}
}
if(type.equals("ByWeek")){
//获取时间间隔了多少周
Integer between = Integer.parseInt(String.valueOf(DateUtils.getBetween(startDate, endDate, DateUtils.YYYYMMDD, DateUtils.WEEK_RETURN)));
interval=new String[between];
for (Integer i = 1; i <= between; i++) {
calendar.set(y,m-1,d);
calendar.add(Calendar.WEEK_OF_YEAR, -i);
interval[i-1]=simpleDateFormat.format(calendar.getTime());
}
}
if(type.equals("ByQuarter")){
//获取时间间隔了多少个季度
Integer betweens = Integer.parseInt(String.valueOf(DateUtils.getBetween(startDate, endDate, DateUtils.YYYYMMDD, (DateUtils.MONTH_RETURN))));
Integer between=betweens/4;
interval=new String[between];
for (Integer i = 1; i <= between; i++) {
calendar.set(y,m-1,d);
calendar.add(Calendar.MONTH, -i*3);
interval[i-1]=simpleDateFormat.format(calendar.getTime());
}
}
return interval;
}
public static void main(String[] args) throws ParseException {
String[] dateArr = calendarData("2000-01-02", "2020-01-02", "ByDay");
int length = dateArr.length;
for (String s : dateArr) {
System.out.println(s);
}
}
//计算两个日期相隔的长度(年、月、季度、天、小时、分、秒、周)
public static long getBetween(String beginTime, String endTime, String formatPattern, int returnPattern) throws ParseException{
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(formatPattern);
Date beginDate = simpleDateFormat.parse(beginTime);
Date endDate = simpleDateFormat.parse(endTime);
Calendar beginCalendar = Calendar.getInstance();
Calendar endCalendar = Calendar.getInstance();
beginCalendar.setTime(beginDate);
endCalendar.setTime(endDate);
switch (returnPattern) {
case YEAR_RETURN:
return DateUtils.getByField(beginCalendar, endCalendar, Calendar.YEAR);
case MONTH_RETURN:
return DateUtils.getByField(beginCalendar, endCalendar, Calendar.YEAR)*12 + DateUtils.getByField(beginCalendar, endCalendar, Calendar.MONTH);
case QUARTER_RETURN:
return DateUtils.getByField(beginCalendar, endCalendar, Calendar.YEAR)*12 + DateUtils.getByField(beginCalendar, endCalendar, Calendar.MONTH);
case DAY_RETURN:
return DateUtils.getTime(beginDate, endDate)/(24*60*60*1000);
case HOUR_RETURN:
return DateUtils.getTime(beginDate, endDate)/(60*60*1000);
case MINUTE_RETURN:
return DateUtils.getTime(beginDate, endDate)/(60*1000);
case SECOND_RETURN:
return DateUtils.getTime(beginDate, endDate)/1000;
case WEEK_RETURN:
return DateUtils.getTime(beginDate, endDate)/(7*24*60*60*1000);
default:
return 0;
}
}
private static long getByField(Calendar beginCalendar, Calendar endCalendar, int calendarField){
return endCalendar.get(calendarField) - beginCalendar.get(calendarField);
}
private static long getTime(Date beginDate, Date endDate){
return endDate.getTime() - beginDate.getTime();
}
// public static void main(String[] args) {
// try {
// System.out.println(DateUtils.getBetween("2013-05-02", "2020-12-18", DateUtils.YYYYMMDD, DateUtils.YEAR_RETURN ));
// System.out.println(DateUtils.getBetween("2013-05-02", "2020-12-18", DateUtils.YYYYMMDD, DateUtils.MONTH_RETURN));
// System.out.println(DateUtils.getBetween("2013-05-02", "2020-12-18", DateUtils.YYYYMMDD, DateUtils.DAY_RETURN ));
// System.out.println(DateUtils.getBetween("2013-05-02", "2020-12-18", DateUtils.YYYYMMDD, DateUtils.HOUR_RETURN));
// System.out.println(DateUtils.getBetween("2013-05-02", "2020-12-18", DateUtils.YYYYMMDD, DateUtils.MINUTE_RETURN));
// System.out.println(DateUtils.getBetween("2013-05-02", "2020-12-18", DateUtils.YYYYMMDD, DateUtils.SECOND_RETURN));
// System.out.println(DateUtils.getBetween("2013-05-02", "2020-12-18", DateUtils.YYYYMMDD, DateUtils.WEEK_RETURN));
// } catch (ParseException e) {
// e.printStackTrace();
// }
// }
}
Java补全日期及计算日期长度
最新推荐文章于 2024-05-24 11:22:17 发布