1. 程式人生 > 其它 >日曆工具,下發了一個任務,寫下一年的日期計劃。這個工具類可以計算某一年的所有日期,一年中所有的週一到週日都可以計算出來

日曆工具,下發了一個任務,寫下一年的日期計劃。這個工具類可以計算某一年的所有日期,一年中所有的週一到週日都可以計算出來

  1 package com.ly.tool.date;
  2 
  3 import java.text.DateFormat;
  4 import java.text.ParseException;
  5 import java.text.SimpleDateFormat;
  6 import java.util.ArrayList;
  7 import java.util.Calendar;
  8 import java.util.Date;
  9 import java.util.List;
 10 
 11 /**
 12  * YearlyDate
 13  *
 14
* @author Morningstar 15 * @version 1.0 16 * 2021/12/31 15:32 17 * 18 **/ 19 public class YearlyDate { 20 21 /** 22 * 計算全年的日期 23 * @param year 24 * @return 25 * 26 */ 27 public static ArrayList<String> GetDate(int year){ 28 ArrayList<String> dateList = new
ArrayList<>(); 29 for(int mon = 1;mon<13;mon++){ 30 int month=mon; 31 int day=0; 32 //第二步:求輸入的年份月份與1900年1月1日相隔的總天數 33 for (int i = 1900; i < year; i++) { 34 if ((i % 4 == 0 && i % 100 != 0)||(i % 400 == 0)) { 35 day+=366;
36 }else { 37 day+=365; 38 } 39 } 40 //求相隔月份的天數 41 for (int i = 1; i < month; i++) { 42 if (i==2) { 43 if ((year%4==0&&year%100!=0)||(year%400==0)) { 44 day+=29; 45 }else { 46 day+=28; 47 } 48 }else if (i==4||i==6||i==9||i==11) { 49 day+=30; 50 }else { 51 day+=31; 52 } 53 } 54 //第三步:計算上個月最後一天是星期幾 55 int weeks=day%7; 56 int day2=0; 57 switch (month) { 58 case 2: 59 if (year%4==0&&year%100!=0||year%400==0) { 60 day2+=29; 61 }else { 62 day2+=28; 63 } 64 break; 65 case 4: 66 case 6: 67 case 9: 68 case 11: 69 day2=30; 70 break; 71 default: 72 day2=31; 73 break; 74 } 75 //第四部:列印日曆 76 for (int i = 1; i <= weeks; i++) { 77 78 } 79 for (int i = 1; i <= day2; i++) { 80 81 String sdate=year+"-"+mon+"-"+i; 82 dateList.add(sdate); 83 if ((i+weeks)%7==0) { 84 85 } 86 } 87 88 } 89 90 return dateList; 91 92 93 } 94 95 /** 96 * 計算某一天是周幾 97 * @param pTime 98 * @return 99 * 格式為2018-01-01 100 * 如果錯誤就返回0 101 */ 102 public static int dayForWeek(String pTime){ 103 104 try { 105 106 107 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); 108 109 Date tmpDate = format.parse(pTime); 110 111 Calendar cal = Calendar.getInstance(); 112 113 // String[] weekDays = { "7", "1", "2", "3", "4", "5", "6" }; 114 int [] weekDays = {7,1,2,3,4,5,6}; 115 116 try { 117 118 cal.setTime(tmpDate); 119 120 } catch (Exception e) { 121 122 e.printStackTrace(); 123 124 } 125 126 int w = cal.get(Calendar.DAY_OF_WEEK) - 1; // 指示一個星期中的某天。 127 128 if (w < 0) { 129 w = 0; 130 } 131 132 return weekDays[w]; 133 }catch (Exception e){ 134 e.printStackTrace(); 135 return 0; 136 } 137 138 } 139 140 /** 141 * 把一年的週一到週日封裝到一個list裡面 142 * 頂層list裡面有7個list,從週一到週日排列 143 * @param year 144 * @return 145 */ 146 public static List<List<String>> getYearWeek(int year) { 147 //獲取到某年的所有的日期 148 //1900年1月1日相隔的總天數 149 ArrayList<String> dateList = GetDate(year); 150 ArrayList<String> MondayList = new ArrayList<>(); 151 ArrayList<String> TuesdayList = new ArrayList<>(); 152 ArrayList<String> WednesdayList = new ArrayList<>(); 153 ArrayList<String> ThursdayList = new ArrayList<>(); 154 ArrayList<String> FridayList = new ArrayList<>(); 155 ArrayList<String> SaturdayList = new ArrayList<>(); 156 ArrayList<String> SundayList = new ArrayList<>(); 157 //判斷每天是周幾 158 dateList.forEach(s -> { 159 try { 160 int i= dayForWeek(s); 161 // System.out.println(s+"周"+CalculationDate.dayForWeek(s)); 162 if (i==1){ 163 MondayList.add(s); 164 return; 165 } 166 if (i==2){ 167 TuesdayList.add(s); 168 return; 169 } 170 if (i==3){ 171 WednesdayList.add(s); 172 return; 173 } 174 if (i==4){ 175 ThursdayList.add(s); 176 return; 177 } 178 if (i==5){ 179 FridayList.add(s); 180 return; 181 } 182 if (i==6){ 183 SaturdayList.add(s); 184 return; 185 } 186 if (i==7){ 187 SundayList.add(s); 188 return; 189 } 190 191 } catch (Throwable throwable) { 192 throwable.printStackTrace(); 193 } 194 195 }); 196 197 ArrayList<List<String>> lists = new ArrayList<>(); 198 lists.add(MondayList); 199 lists.add(TuesdayList); 200 lists.add(WednesdayList); 201 lists.add(ThursdayList); 202 lists.add(FridayList); 203 lists.add(SaturdayList); 204 lists.add(SundayList); 205 return lists; 206 207 208 209 } 210 211 /** 212 * 獲取兩個日期之間的所有日期 213 * 214 * @param startTime 215 * 開始日期 格式2018-01-01 216 * @param endTime 217 * 結束日期 格式2018-01-01 218 * @return 219 */ 220 public static List<String> getDays(String startTime, String endTime) { 221 222 // 返回的日期集合 223 List<String> days = new ArrayList<String>(); 224 225 DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); 226 try { 227 Date start = dateFormat.parse(startTime); 228 Date end = dateFormat.parse(endTime); 229 230 Calendar tempStart = Calendar.getInstance(); 231 tempStart.setTime(start); 232 233 Calendar tempEnd = Calendar.getInstance(); 234 tempEnd.setTime(end); 235 tempEnd.add(Calendar.DATE, +1);// 日期加1(包含結束) 236 while (tempStart.before(tempEnd)) { 237 days.add(dateFormat.format(tempStart.getTime())); 238 tempStart.add(Calendar.DAY_OF_YEAR, 1); 239 } 240 241 } catch (ParseException e) { 242 e.printStackTrace(); 243 } 244 245 return days; 246 } 247 248 249 250 251 252 }