Java 将一段时间以周、月、季分割
1 public class MyUtils { 2 /** 3 * 以季度分割时间段 4 * 此处季度是以 12-2月 3-5月 6-8月 9-11月 划分 5 * @param startTime 开始时间戳(毫秒) 6 * @param endTime 结束时间戳(毫秒) 7 * @param beginDateList 开始段时间戳 和 结束段时间戳 一一对应 8 * @param endDateList 结束段时间戳 和 开始段时间戳 一一对应 9 */ 10 public static void getIntervalTimeByQuarter(Long startTime, Long endTime, List<Long> beginDateList, List<Long> endDateList) { 11 Date startDate = new Date(startTime); 12 Date endDate = new Date(endTime); 13 Calendar calendar = Calendar.getInstance(); 14 calendar.setTime(startDate); 15 int month = calendar.get(Calendar.MONTH) + 1; 16 switch (month) { 17 case 12: 18 case 3: 19 case 6: 20 case 9: 21 addTime(beginDateList, endDateList, startDate, endDate, calendar, 3); 22 break; 23 case 1: 24 case 4: 25 case 7: 26 case 10: 27 addTime(beginDateList, endDateList, startDate, endDate, calendar, 2); 28 break; 29 case 2: 30 case 5: 31 case 8: 32 case 11: 33 addTime(beginDateList, endDateList, startDate, endDate, calendar, 1); 34 break; 35 } 36 } 37 38 private static void addTime(List<Long> beginDateList, List<Long> endDateList, Date startDate, Date endDate, Calendar calendar, int i) { 39 beginDateList.add(startDate.getTime()); 40 calendar.add(Calendar.MONTH, i); 41 calendar.set(Calendar.DAY_OF_MONTH, 1); 42 calendar.add(Calendar.DATE, -1); 43 calendar.set(Calendar.HOUR_OF_DAY, 13); 44 calendar.set(Calendar.MINUTE, 59); 45 calendar.set(Calendar.SECOND, 59); 46 if (calendar.getTimeInMillis() > endDate.getTime()) { 47 endDateList.add(endDate.getTime()); 48 49 } else { 50 endDateList.add(calendar.getTimeInMillis()); 51 while (calendar.getTimeInMillis() < endDate.getTime()) { 52 calendar.add(Calendar.DATE, 1); 53 calendar.set(Calendar.HOUR_OF_DAY, 0); 54 calendar.set(Calendar.MINUTE, 0); 55 calendar.set(Calendar.SECOND, 0); 56 beginDateList.add(calendar.getTimeInMillis()); 57 calendar.add(Calendar.MONTH, 3); 58 calendar.set(Calendar.DAY_OF_MONTH, 1); 59 calendar.add(Calendar.DATE, -1); 60 calendar.set(Calendar.HOUR_OF_DAY, 13); 61 calendar.set(Calendar.MINUTE, 59); 62 calendar.set(Calendar.SECOND, 59); 63 if (calendar.getTimeInMillis() < endDate.getTime()) { 64 endDateList.add(calendar.getTimeInMillis()); 65 } else { 66 endDateList.add(endDate.getTime()); 67 } 68 } 69 } 70 } 71 72 /** 73 * 以周分割时间段 74 * 75 * @param startTime 开始时间戳(毫秒) 76 * @param endTime 结束时间戳(毫秒) 77 * @param beginDateList 开始段时间戳 和 结束段时间戳 一一对应 78 * @param endDateList 结束段时间戳 和 开始段时间戳 一一对应 79 */ 80 public static void getIntervalTimeByWeek(Long startTime, Long endTime, List<Long> beginDateList, List<Long> endDateList) { 81 Date startDate = new Date(startTime); 82 Date endDate = new Date(endTime); 83 SimpleDateFormat sdw = new SimpleDateFormat("E"); 84 Calendar calendar = Calendar.getInstance(); 85 String begin = sdw.format(startDate); 86 calendar.setTime(startDate); 87 beginDateList.add(calendar.getTimeInMillis()); 88 if ("星期一".equals(begin)) { 89 addTimeStamp(beginDateList, endDateList, startDate, endDate, sdw, calendar); 90 } else { 91 if ("星期日".equals(sdw.format(startDate))) { 92 Calendar special = Calendar.getInstance(); 93 special.setTime(startDate); 94 special.set(Calendar.HOUR_OF_DAY, 23); 95 special.set(Calendar.MINUTE, 59); 96 special.set(Calendar.SECOND, 59); 97 endDateList.add(special.getTime().getTime()); 98 } 99 addTimeStamp(beginDateList, endDateList, startDate, endDate, sdw, calendar); 100 } 101 } 102 103 private static void addTimeStamp(List<Long> beginDateList, List<Long> endDateList, Date startDate, Date endDate, SimpleDateFormat sdw, Calendar calendar) { 104 while (startDate.getTime() < endDate.getTime()) { 105 calendar.add(Calendar.DAY_OF_YEAR, 1); 106 startDate = calendar.getTime(); 107 if ("星期一".equals(sdw.format(startDate))) { 108 calendar.set(Calendar.HOUR_OF_DAY, 0); 109 calendar.set(Calendar.MINUTE, 0); 110 calendar.set(Calendar.SECOND, 0); 111 beginDateList.add(calendar.getTimeInMillis()); 112 } else if ("星期日".equals(sdw.format(startDate)) || startDate.getTime() >= endDate.getTime()) { 113 if (startDate.getTime() <= endDate.getTime()) { 114 calendar.set(Calendar.HOUR_OF_DAY, 23); 115 calendar.set(Calendar.MINUTE, 59); 116 calendar.set(Calendar.SECOND, 59); 117 endDateList.add(calendar.getTimeInMillis()); 118 } else { 119 endDateList.add(endDate.getTime()); 120 } 121 } 122 } 123 } 124 125 /** 126 * 按照月份分割一段时间 127 * 128 * @param startTime 开始时间戳(毫秒) 129 * @param endTime 结束时间戳(毫秒) 130 * @param beginDateList 开始段时间戳 和 结束段时间戳 一一对应 131 * @param endDateList 结束段时间戳 和 开始段时间戳 一一对应 132 */ 133 public static void getIntervalTimeByMonth(Long startTime, Long endTime, List<Long> beginDateList, List<Long> endDateList) { 134 Date startDate = new Date(startTime); 135 Date endDate = new Date(endTime); 136 Calendar calendar = Calendar.getInstance(); 137 calendar.setTime(startDate); 138 beginDateList.add(calendar.getTimeInMillis()); 139 while (calendar.getTimeInMillis() < endDate.getTime()) { 140 calendar.add(Calendar.MONTH, 1); 141 calendar.set(Calendar.DAY_OF_MONTH, 1); 142 calendar.add(Calendar.DATE, -1); 143 calendar.set(Calendar.HOUR_OF_DAY, 13); 144 calendar.set(Calendar.MINUTE, 59); 145 calendar.set(Calendar.SECOND, 59); 146 if(calendar.getTimeInMillis() < endDate.getTime()){ 147 endDateList.add(calendar.getTimeInMillis()); 148 } else { 149 endDateList.add(endDate.getTime()); 150 break; 151 } 152 calendar.add(Calendar.DATE, 1); 153 calendar.set(Calendar.HOUR_OF_DAY, 0); 154 calendar.set(Calendar.MINUTE, 0); 155 calendar.set(Calendar.SECOND, 0); 156 beginDateList.add(calendar.getTimeInMillis()); 157 } 158 } 159 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义