日历工具,下发了一个任务,写下一年的日期计划。这个工具类可以计算某一年的所有日期,一年中所有的周一到周日都可以计算出来

  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 }

 

posted on 2021-12-31 16:12  lxlya  阅读(70)  评论(0)    收藏  举报

导航