航季日期的过去+java_Java 将一段时间以周、月、季分割

工具类MyUtils代码如下所示:

public class MyUtils {

/**

* 以季度分割时间段

* 此处季度是以 12-2月 3-5月 6-8月 9-11月 划分

* @param startTime 开始时间戳(毫秒)

* @param endTime 结束时间戳(毫秒)

* @param beginDateList 开始段时间戳 和 结束段时间戳 一一对应

* @param endDateList 结束段时间戳 和 开始段时间戳 一一对应

*/

public static void getIntervalTimeByQuarter(Long startTime, Long endTime, List beginDateList, List endDateList) {

Date startDate = new Date(startTime);

Date endDate = new Date(endTime);

Calendar calendar = Calendar.getInstance();

calendar.setTime(startDate);

int month = calendar.get(Calendar.MONTH) + 1;

switch (month) {

case 12:

case 3:

case 6:

case 9:

addTime(beginDateList, endDateList, startDate, endDate, calendar, 3);

break;

case 1:

case 4:

case 7:

case 10:

addTime(beginDateList, endDateList, startDate, endDate, calendar, 2);

break;

case 2:

case 5:

case 8:

case 11:

addTime(beginDateList, endDateList, startDate, endDate, calendar, 1);

break;

}

}

private static void addTime(List beginDateList, List endDateList, Date startDate, Date endDate, Calendar calendar, int i) {

beginDateList.add(startDate.getTime());

calendar.add(Calendar.MONTH, i);

calendar.set(Calendar.DAY_OF_MONTH, 1);

calendar.add(Calendar.DATE, -1);

calendar.set(Calendar.HOUR_OF_DAY, 13);

calendar.set(Calendar.MINUTE, 59);

calendar.set(Calendar.SECOND, 59);

if (calendar.getTimeInMillis() > endDate.getTime()) {

endDateList.add(endDate.getTime());

} else {

endDateList.add(calendar.getTimeInMillis());

while (calendar.getTimeInMillis() < endDate.getTime()) {

calendar.add(Calendar.DATE, 1);

calendar.set(Calendar.HOUR_OF_DAY, 0);

calendar.set(Calendar.MINUTE, 0);

calendar.set(Calendar.SECOND, 0);

beginDateList.add(calendar.getTimeInMillis());

calendar.add(Calendar.MONTH, 3);

calendar.set(Calendar.DAY_OF_MONTH, 1);

calendar.add(Calendar.DATE, -1);

calendar.set(Calendar.HOUR_OF_DAY, 13);

calendar.set(Calendar.MINUTE, 59);

calendar.set(Calendar.SECOND, 59);

if (calendar.getTimeInMillis() < endDate.getTime()) {

endDateList.add(calendar.getTimeInMillis());

} else {

endDateList.add(endDate.getTime());

}

}

}

}

/**

* 以周分割时间段

*

* @param startTime 开始时间戳(毫秒)

* @param endTime 结束时间戳(毫秒)

* @param beginDateList 开始段时间戳 和 结束段时间戳 一一对应

* @param endDateList 结束段时间戳 和 开始段时间戳 一一对应

*/

public static void getIntervalTimeByWeek(Long startTime, Long endTime, List beginDateList, List endDateList) {

Date startDate = new Date(startTime);

Date endDate = new Date(endTime);

SimpleDateFormat sdw = new SimpleDateFormat("E");

Calendar calendar = Calendar.getInstance();

String begin = sdw.format(startDate);

calendar.setTime(startDate);

beginDateList.add(calendar.getTimeInMillis());

if ("星期一".equals(begin)) {

addTimeStamp(beginDateList, endDateList, startDate, endDate, sdw, calendar);

} else {

if ("星期日".equals(sdw.format(startDate))) {

Calendar special = Calendar.getInstance();

special.setTime(startDate);

special.set(Calendar.HOUR_OF_DAY, 23);

special.set(Calendar.MINUTE, 59);

special.set(Calendar.SECOND, 59);

endDateList.add(special.getTime().getTime());

}

addTimeStamp(beginDateList, endDateList, startDate, endDate, sdw, calendar);

}

}

private static void addTimeStamp(List beginDateList, List endDateList, Date startDate, Date endDate, SimpleDateFormat sdw, Calendar calendar) {

while (startDate.getTime() < endDate.getTime()) {

calendar.add(Calendar.DAY_OF_YEAR, 1);

startDate = calendar.getTime();

if ("星期一".equals(sdw.format(startDate))) {

calendar.set(Calendar.HOUR_OF_DAY, 0);

calendar.set(Calendar.MINUTE, 0);

calendar.set(Calendar.SECOND, 0);

beginDateList.add(calendar.getTimeInMillis());

} else if ("星期日".equals(sdw.format(startDate)) || startDate.getTime() >= endDate.getTime()) {

if (startDate.getTime() <= endDate.getTime()) {

calendar.set(Calendar.HOUR_OF_DAY, 23);

calendar.set(Calendar.MINUTE, 59);

calendar.set(Calendar.SECOND, 59);

endDateList.add(calendar.getTimeInMillis());

} else {

endDateList.add(endDate.getTime());

}

}

}

}

/**

* 按照月份分割一段时间

*

* @param startTime 开始时间戳(毫秒)

* @param endTime 结束时间戳(毫秒)

* @param beginDateList 开始段时间戳 和 结束段时间戳 一一对应

* @param endDateList 结束段时间戳 和 开始段时间戳 一一对应

*/

public static void getIntervalTimeByMonth(Long startTime, Long endTime, List beginDateList, List endDateList) {

Date startDate = new Date(startTime);

Date endDate = new Date(endTime);

Calendar calendar = Calendar.getInstance();

calendar.setTime(startDate);

beginDateList.add(calendar.getTimeInMillis());

while (calendar.getTimeInMillis() < endDate.getTime()) {

calendar.add(Calendar.MONTH, 1);

calendar.set(Calendar.DAY_OF_MONTH, 1);

calendar.add(Calendar.DATE, -1);

calendar.set(Calendar.HOUR_OF_DAY, 13);

calendar.set(Calendar.MINUTE, 59);

calendar.set(Calendar.SECOND, 59);

if(calendar.getTimeInMillis() < endDate.getTime()){

endDateList.add(calendar.getTimeInMillis());

} else {

endDateList.add(endDate.getTime());

break;

}

calendar.add(Calendar.DATE, 1);

calendar.set(Calendar.HOUR_OF_DAY, 0);

calendar.set(Calendar.MINUTE, 0);

calendar.set(Calendar.SECOND, 0);

beginDateList.add(calendar.getTimeInMillis());

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值