/**
* 获取过去或者未来 任意天内的日期数组
* @param intervals intervals天内
* @return 日期数组
*/
public static ArrayList<String> test(int intervals ) {
ArrayList<String> pastDaysList = new ArrayList<>();
ArrayList<String> fetureDaysList = new ArrayList<>();
for (int i = 0; i <intervals; i++) {
pastDaysList.add(getPastDate(i));
fetureDaysList.add(getFetureDate(i));
}
return pastDaysList;
}
/**
* 获取过去第几天的日期
*
* @param past
* @return
*/
public static String getPastDate(int past) {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) - past);
Date today = calendar.getTime();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
String result = format.format(today);
Log.e(null, result);
return result;
}
/**
* 获取未来 第 past 天的日期
* @param past
* @return
*/
public static String getFetureDate(int past) {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + past);
Date today = calendar.getTime();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
String result = format.format(today);
Log.e(null, result);
return result;
}
/**
* 时间段内所有日期
* @param begin
* @param end
* @return
* @throws ParseException
*/
public static List<String> getPeriod(String begin, String end) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
List<String> strDate = new ArrayList();
strDate.add(begin);
Calendar calendar = Calendar.getInstance();
calendar.setTime(sdf.parse(begin));
boolean bContinue = true;
while (bContinue) {
calendar.add(Calendar.DAY_OF_MONTH, 1);
if (sdf.parse(end).after(calendar.getTime())) {
strDate.add(sdf.format(calendar.getTime()).toString());
} else {
break;
}
}
strDate.add(end);
return strDate;
}
//根据当前日期获得所在周的日期区间(周一和周日日期)
public String getNowWeekTimeInterval(String type) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date = new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(date);
// 判断要计算的日期是否是周日,如果是则减一天计算周六的,否则会出问题,计算到下一周去了
int dayWeek = cal.get(Calendar.DAY_OF_WEEK);// 获得当前日期是一个星期的第几天
if (1 == dayWeek) {
cal.add(Calendar.DAY_OF_MONTH, -1);
}
// 设置一个星期的第一天,按中国的习惯一个星期的第一天是星期一
cal.setFirstDayOfWeek(Calendar.MONDAY);
// 获得当前日期是一个星期的第几天
int day = cal.get(Calendar.DAY_OF_WEEK);
if(type.equals("start")){
// 根据日历的规则,给当前日期减去星期几与一个星期第一天的差值
cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - day);
String imptimeBegin = sdf.format(cal.getTime());
return imptimeBegin;
}else if(type.equals("end")){
cal.add(Calendar.DATE, 6);
String imptimeEnd = sdf.format(cal.getTime());
return imptimeEnd;
}
return null;
}
//根据当前日期获得上周的日期
private String getLastWeekTimeInterval(String type) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar calendar = Calendar.getInstance();
if(type.equals("start")){//周一
int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK) - 1;
int offset1 = 1 - dayOfWeek;
calendar.add(Calendar.DATE, offset1 - 7);
String lastBeginDate = sdf.format(calendar.getTime());
return lastBeginDate;
}else if(type.equals("end")){//周日
int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK) - 1;
int offset2 = 7 - dayOfWeek;
calendar.add(Calendar.DATE, offset2 - 7);
String lastEndDate = sdf.format(calendar.getTime());
return lastEndDate;
}
return null;
}
//获取一周开始到结束的list集合
public static List<Date> findDates(Date dBegin, Date dEnd)
{
List lDate = new ArrayList();
lDate.add(dBegin);
Calendar calBegin = Calendar.getInstance();
// 使用给定的 Date 设置此 Calendar 的时间
calBegin.setTime(dBegin);
Calendar calEnd = Calendar.getInstance();
// 使用给定的 Date 设置此 Calendar 的时间
calEnd.setTime(dEnd);
// 测试此日期是否在指定日期之后
while (dEnd.after(calBegin.getTime()))
{
// 根据日历的规则,为给定的日历字段添加或减去指定的时间量
calBegin.add(Calendar.DAY_OF_MONTH, 1);
lDate.add(calBegin.getTime());
}
return lDate;
}
//本月日期
private String getNowMonthTimeInterval(String type){
SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd");
Calendar ca = Calendar.getInstance();
if(type.equals("start")){//本月第一天
ca.add(Calendar.MONTH, 0);
ca.set(Calendar.DAY_OF_MONTH,1);
String start= format.format(ca.getTime());
return start;
}else if(type.equals("end")){//获取当前月最后一天
ca.set(Calendar.DAY_OF_MONTH, ca.getActualMaximum(Calendar.DAY_OF_MONTH));
String end= format.format(ca.getTime());
return end;
}
return null;
}
//上个月日期
private String getLastMonthTimeInterval(String type){
SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd");
Calendar ca = Calendar.getInstance();
if(type.equals("start")){//上月第一天
ca.add(Calendar.MONTH, -1);
ca.set(Calendar.DAY_OF_MONTH, 1);
String start = format.format(ca.getTime());
return start;
}else if(type.equals("end")){//获取上月最后一天
int month=ca.get(Calendar.MONTH);
ca.set(Calendar.MONTH, month-1);
ca.set(Calendar.DAY_OF_MONTH, ca.getActualMaximum(Calendar.DAY_OF_MONTH));
String end = format.format(ca.getTime());
return end;
}
return null;
}