java 获取某时间段内每月/每年的最后一天的集合
2018-04-02 16:48
633 查看
java 获取某时间段内每个月的最后一天的集合,当月的获取当前系统时间的前一天时间。
* <p>获取某时间段内每年的最后一天,以及结束日期的前一天日期集合</P>
* <pre>
* 获取每年最后一天日期,以及结束日期的前一天日期的集合
* </pre>
* @param startTime:开始时间
* @param endTime:结束时间
* @return List<String>
* @author: 笨笨熊咦
* @date: 2018年3月15日下午2:17:18
*/
public static List<String> getLastDayYearList(String startTime, String endTime) {
Calendar calendar = Calendar.getInstance();
// 声明日期格式:YYYY-MM:2018-02
SimpleDateFormat sdf = new SimpleDateFormat(SDF_Y);
// 获取开始时间 格式:2018-02
String yearStartTime = startTime.substring(0, 4);
// 获取结束时间 格式:2018-03
String yearEndTime = endTime.substring(0, 4);
// 获取当前整月
String yearStr = getCurMonthDateStr();
String year = yearStr.substring(0, 4);
// 存储每月最后一天日期结果集合
List<String> dateList = new ArrayList<>();
// 存储某时间段中的各个月份
List<String> monthDateList = new ArrayList<>();
// 1.判断startTime是否为当月时间
if (yearStartTime.equals(year)) {
// 声明日期格式:YYYY-MM-DD : 2018-02-14
SimpleDateFormat format = new SimpleDateFormat(SDF_YMD);
try {
// 2.是:获取当前时间的前一天时间,并放入集合;
String yesterdayStr = DateTimeUtil.addDay(endTime, -1).substring(0, 11) + "00:00:00";
Date yesterdayDate = format.parse(yesterdayStr);
dateList.add(format.format(yesterdayDate));
} catch (ParseException e) {
e.printStackTrace();
}
}
// 3.否:获取startTime当月以后每个月的最后一天时间,一直到当前月上个月末时间;
if (!yearStartTime.equals(year)) {
try {
// 设置开始时间
calendar.setTime(sdf.parse(yearStartTime));
// 把开始时间添加到List集合中
monthDateList.add(yearStartTime);
while (true) {
// 根据日历的规则,为给定的日历字段添加或减去指定的时间量
calendar.add(Calendar.YEAR, 1);
// 测试此日期是否在指定日期之后
if (sdf.parse(yearEndTime).after(calendar.getTime())) {
monthDateList.add(sdf.format(calendar.getTime()));
} else {
break;
}
}
} catch (ParseException e) {
e.printStackTrace();
}
if (ObjectUtils.isNullList(monthDateList)) {
return dateList;
}
// 1.获取每月最后一天的集合,遍历月的集合,获取每个月的最后一天时间
dateList = getLastDayYearList(monthDateList, endTime);
}
return dateList;
}
public static List<String> getLastDayYearList(List<String> list, String endTime) {
Calendar calendar = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat(SDF_YMD);
// 存储每个月月末时间集合
List<String> dateList = new ArrayList<>();
for (String date : list) {
// 截取年数
String yearStr = date.substring(0, 4);
int year = Integer.parseInt(yearStr);
// 设置年月
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONTH, 12);
calendar.set(Calendar.DAY_OF_MONTH, 0);
String lastday = sdf.format(calendar.getTime());
dateList.add(lastday);
}
// 获取结束时间前一天时间
try {
String yesterdayStr = DateTimeUtil.addDay(endTime, -1).substring(0, 11) + "00:00:00";
Date yesterdayDate = sdf.parse(yesterdayStr);
dateList.add(sdf.format(yesterdayDate));
} catch (ParseException e) {
e.printStackTrace();
}
return dateList;
}
private static final String SDF_YMD_H = "yyyy-MM-dd HH:00:00"; private static final String SDF_YMD = "yyyy-MM-dd 00:00:00"; private static final String SDF_YM = "yyyy-MM"; private static final String SDF_Y = "yyyy"; /** * <p> * 获取时间段内每个月的最后一天,当月的获取当前系统时间的前一天时间 * </P> * * @param startTime: * @param endTime: * @return List<String> * @author: benbenxion * @date: 2018年3月15日上午10:38:26 */ public static List<String> getLastDayMonthList(String startTime, String endTime) { Calendar calendar = Calendar.getInstance(); // 声明日期格式:YYYY-MM:2018-02 SimpleDateFormat sdf = new SimpleDateFormat(SDF_YM); // 获取开始时间 格式:2018-02 String monthStartTime = startTime.substring(0, 7); // 获取结束时间 格式:2018-03 String monthEndTime = endTime.substring(0, 7); // 获取当前整月 String monthDate = getCurMonthDateStr(); // 存储每月最后一天日期结果集合 List<String> dateList = new ArrayList<>(); // 存储某时间段中的各个月份 List<String> monthDateList = new ArrayList<>(); // 1.判断startTime是否为当月时间 if (monthStartTime.equals(monthDate)) { // 声明日期格式:YYYY-MM-DD : 2018-02-14 SimpleDateFormat format = new SimpleDateFormat(SDF_YMD); try { // 2.是:获取当前时间的前一天时间,并放入集合; String yesterdayStr = DateTimeUtil.addDay(endTime, -1).substring(0, 11) + "00:00:00"; Date yesterdayDate = format.parse(yesterdayStr); dateList.add(format.format(yesterdayDate)); } catch (ParseException e) { e.printStackTrace(); } } // 3.否:获取startTime当月以后每个月的最后一天时间,一直到当前月上个月末时间; if (!monthStartTime.equals(monthDate)) { try { // 设置开始时间 calendar.setTime(sdf.parse(monthStartTime)); // 把开始时间添加到List集合中 monthDateList.add(monthStartTime); while (true) { // 根据日历的规则,为给定的日历字段添加或减去指定的时间量 calendar.add(Calendar.MONTH, 1); // 测试此日期是否在指定日期之后 if (sdf.parse(monthEndTime).after(calendar.getTime())) { monthDateList.add(sdf.format(calendar.getTime())); } else { break; } } } catch (ParseException e) { e.printStackTrace(); } if (ObjectUtils.isNullList(monthDateList)) { return dateList; } // 1.获取每月最后一天的集合,遍历月的集合,获取每个月的最后一天时间 dateList = getLastDayMonthList(monthDateList, endTime); } return dateList; } /** * <p>根据月份集合获取每个月的最后一天时间</P> * @param list:月份集合 * @param endTime:结束时间 * @return List<String> * @author: 笨笨熊咦 * @date: 2018年3月15日下午1:57:06 */ public static List<String> getLastDayMonthList(List<String> list, String endTime) { Calendar calendar = Calendar.getInstance(); SimpleDateFormat sdf = new SimpleDateFormat(SDF_YMD); // 存储每个月月末时间集合 List<String> dateList = new ArrayList<>(); for (String date : list) { // 截取年数 String yearStr = date.substring(0, 4); int year = Integer.parseInt(yearStr); String monthStr = date.substring(5, 7); int month = Integer.parseInt(monthStr); // 设置年月 calendar.set(Calendar.YEAR, year); calendar.set(Calendar.MONTH, month); calendar.set(Calendar.DAY_OF_MONTH, 0); String lastday = sdf.format(calendar.getTime()); dateList.add(lastday); } // 获取结束时间前一天时间 try { String yesterdayStr = DateTimeUtil.addDay(endTime, -1).substring(0, 11) + "00:00:00"; Date yesterdayDate = sdf.parse(yesterdayStr); dateList.add(sdf.format(yesterdayDate)); } catch (ParseException e) { e.printStackTrace(); } return dateList; }2.获取某时间段内每年的最后一天,以及结束日期的前一天日期集合。 /**
* <p>获取某时间段内每年的最后一天,以及结束日期的前一天日期集合</P>
* <pre>
* 获取每年最后一天日期,以及结束日期的前一天日期的集合
* </pre>
* @param startTime:开始时间
* @param endTime:结束时间
* @return List<String>
* @author: 笨笨熊咦
* @date: 2018年3月15日下午2:17:18
*/
public static List<String> getLastDayYearList(String startTime, String endTime) {
Calendar calendar = Calendar.getInstance();
// 声明日期格式:YYYY-MM:2018-02
SimpleDateFormat sdf = new SimpleDateFormat(SDF_Y);
// 获取开始时间 格式:2018-02
String yearStartTime = startTime.substring(0, 4);
// 获取结束时间 格式:2018-03
String yearEndTime = endTime.substring(0, 4);
// 获取当前整月
String yearStr = getCurMonthDateStr();
String year = yearStr.substring(0, 4);
// 存储每月最后一天日期结果集合
List<String> dateList = new ArrayList<>();
// 存储某时间段中的各个月份
List<String> monthDateList = new ArrayList<>();
// 1.判断startTime是否为当月时间
if (yearStartTime.equals(year)) {
// 声明日期格式:YYYY-MM-DD : 2018-02-14
SimpleDateFormat format = new SimpleDateFormat(SDF_YMD);
try {
// 2.是:获取当前时间的前一天时间,并放入集合;
String yesterdayStr = DateTimeUtil.addDay(endTime, -1).substring(0, 11) + "00:00:00";
Date yesterdayDate = format.parse(yesterdayStr);
dateList.add(format.format(yesterdayDate));
} catch (ParseException e) {
e.printStackTrace();
}
}
// 3.否:获取startTime当月以后每个月的最后一天时间,一直到当前月上个月末时间;
if (!yearStartTime.equals(year)) {
try {
// 设置开始时间
calendar.setTime(sdf.parse(yearStartTime));
// 把开始时间添加到List集合中
monthDateList.add(yearStartTime);
while (true) {
// 根据日历的规则,为给定的日历字段添加或减去指定的时间量
calendar.add(Calendar.YEAR, 1);
// 测试此日期是否在指定日期之后
if (sdf.parse(yearEndTime).after(calendar.getTime())) {
monthDateList.add(sdf.format(calendar.getTime()));
} else {
break;
}
}
} catch (ParseException e) {
e.printStackTrace();
}
if (ObjectUtils.isNullList(monthDateList)) {
return dateList;
}
// 1.获取每月最后一天的集合,遍历月的集合,获取每个月的最后一天时间
dateList = getLastDayYearList(monthDateList, endTime);
}
return dateList;
}
public static List<String> getLastDayYearList(List<String> list, String endTime) {
Calendar calendar = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat(SDF_YMD);
// 存储每个月月末时间集合
List<String> dateList = new ArrayList<>();
for (String date : list) {
// 截取年数
String yearStr = date.substring(0, 4);
int year = Integer.parseInt(yearStr);
// 设置年月
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONTH, 12);
calendar.set(Calendar.DAY_OF_MONTH, 0);
String lastday = sdf.format(calendar.getTime());
dateList.add(lastday);
}
// 获取结束时间前一天时间
try {
String yesterdayStr = DateTimeUtil.addDay(endTime, -1).substring(0, 11) + "00:00:00";
Date yesterdayDate = sdf.parse(yesterdayStr);
dateList.add(sdf.format(yesterdayDate));
} catch (ParseException e) {
e.printStackTrace();
}
return dateList;
}
相关文章推荐
- java获取每月的最后一天实现方法
- java代码的时间类,获取每年的第一天和最后一天
- SQL和Oracle获取每周、每月、每年第一天和最后一天
- Calendar:获取每年每月的最后一天
- SQL Server学习记录之获取每月每季度每年第一天和最后一天
- 获取每月第一天最后一天 java
- SQL Server学习记录之获取每月每季度每年第一天和最后一天
- 获取每月第一天最后一天 java
- java获取每月最后一天
- 获取每年每月每周第一天或最后一天日期
- java 获取当月第一天和最后一天 获取前一个月第一天和最后一天
- python 得到时间序列的每年、每月最后一天和第一天在序列中的位置
- PHP获取每月第一天与最后一天
- java 获取当月第一天和最后一天
- Java里面Calendar获取上个月最后一天
- java获取当前月第一天和最后一天 java获取某月天数 js获取某月天数
- java获取某月,某季度的第一天和最后一天
- Java获取当前时间的上一个月和下一个月,第一天和最后一天,任意时间的第一天和最后一天,任意时间上一个月和下一个月
- java获取本月开始时间和结束时间、上个月第一天和最后一天的时间以及当前日期往前推一周、一个月
- 【java】获取一年里某季、某月、某周的第一天及最后一天时间(日期工具类)