Java 周歷日曆

来源:http://www.cnblogs.com/hoojo/archive/2016/11/23/6093843.html
-Advertisement-
Play Games

WeekCalendarUtils工具類代碼,傳入起始日期即可返回對應日期的周歷日曆,年月部分添加周數統計 一個table頁面展示部分 1 <style type="text/css"> 2 td { 3 border: 1px solid black; 4 background-color: #e ...


WeekCalendarUtils工具類代碼,傳入起始日期即可返回對應日期的周歷日曆,年月部分添加周數統計

  1 import java.util.Calendar;
  2 import java.util.Date;
  3 import java.util.Map;
  4 
  5 import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
  6 import org.apache.commons.lang3.builder.ToStringStyle;
  7 import org.apache.commons.lang3.time.DateFormatUtils;
  8 import org.apache.commons.lang3.time.DateUtils;
  9 
 10 import com.google.common.collect.Maps;
 11 
 12 /**
 13  * <b>function:</b> 周歷
 14  * 
 15  * @author hoojo
 16  * @createDate 2016-11-21 上午11:02:08
 17  * @file WeekCalendarUtils.java
 18  * @package 
 19  * @project 
 20  * @blog http://blog.csdn.net/IBM_hoojo
 21  * @email [email protected]
 22  * @version 1.0
 23  */
 24 public abstract class WeekCalendarUtils {
 25 
 26     public final static String DATE_FORMAT = "yyyy-MM-dd";  
 27     
 28     private static String getWeekDay(Calendar cal) {
 29         if (cal == null) {
 30             return null;
 31         }
 32         
 33         switch (cal.get(Calendar.DAY_OF_WEEK)) {
 34         
 35             case Calendar.MONDAY:
 36                 return "星期一";
 37             case Calendar.TUESDAY:
 38                 return "星期二";
 39             case Calendar.WEDNESDAY:
 40                 return "星期三";
 41             case Calendar.THURSDAY:
 42                 return "星期四";
 43             case Calendar.FRIDAY:
 44                 return "星期五";
 45             case Calendar.SATURDAY:
 46                 return "星期六";
 47             default:
 48                 return "星期日";
 49         }
 50     }
 51     
 52     private static String getSimpleWeekDay(Calendar cal) {
 53         if (cal == null) {
 54             return null;
 55         }
 56         
 57         switch (cal.get(Calendar.DAY_OF_WEEK)) {
 58         
 59             case Calendar.MONDAY:
 60                 return "一";
 61             case Calendar.TUESDAY:
 62                 return "二";
 63             case Calendar.WEDNESDAY:
 64                 return "三";
 65             case Calendar.THURSDAY:
 66                 return "四";
 67             case Calendar.FRIDAY:
 68                 return "五";
 69             case Calendar.SATURDAY:
 70                 return "六";
 71             default:
 72                 return "日";
 73         }
 74     }
 75     
 76     public static String[] getWeekDays(boolean hasMonFirstWeekDay) {
 77         if (hasMonFirstWeekDay) {
 78             return new String[] { "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日" };
 79         } else {
 80             return new String[] { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
 81         }
 82     }
 83 
 84     /**
 85      * <b>function:</b> 獲取周歷
 86      * @author hoojo
 87      * @createDate 2016-11-21 下午6:00:18
 88      * @param begin 開始日期
 89      * @param end 結束日期
 90      * @return 周歷Map
 91      */
 92     public static Map<Integer, YearModel> get(String begin, String end, boolean hasMonFirstWeekDay) {
 93         
 94         Map<Integer, YearModel> years = Maps.newLinkedHashMap();
 95         
 96         Date beginDate = null;
 97         Date endDate = null;
 98         
 99         try {
100             beginDate = DateUtils.parseDate(begin, DATE_FORMAT);
101             endDate = DateUtils.parseDate(end, DATE_FORMAT);
102             
103             if (beginDate.compareTo(endDate) > 0) {
104                 return null;
105             }
106             
107             int weekCount = 0, monthWeekCount = 0;
108             do {
109                 Calendar cal = DateUtils.toCalendar(beginDate);
110                 if (hasMonFirstWeekDay) {
111                     cal.setFirstDayOfWeek(Calendar.MONDAY);
112                 }
113                 
114                 Map<Integer, MonthModel> months = Maps.newLinkedHashMap();
115                 int year = cal.get(Calendar.YEAR);
116                 YearModel yearModel = null;
117                 if (years.containsKey(year)) {
118                     yearModel = years.get(year);
119                     months = yearModel.getMonths();
120                 } else {
121                     yearModel = new YearModel(year, year + "年", months);
122                     years.put(year, yearModel);
123                     
124                     weekCount = 0;
125                 }
126                 
127                 Map<String, WeekModel> weeks = Maps.newLinkedHashMap();
128                 int month = cal.get(Calendar.MONTH) + 1;
129                 MonthModel monthModel = null;
130                 if (months.containsKey(month)) {
131                      monthModel = months.get(month);
132                      weeks = monthModel.getWeeks();
133                 } else {
134                     monthModel = new MonthModel(month, year + "年" + month + "月", weeks);
135                     months.put(month, monthModel);
136                     
137                     monthWeekCount = 0;
138                 }
139                 
140                 Map<String, DayModel> days = Maps.newLinkedHashMap();
141                 int weekInMonth = cal.get(Calendar.WEEK_OF_MONTH);
142                 String week = cal.getWeekYear() + "_" + month + "_" + weekInMonth;
143                 if (weeks.containsKey(week)) {
144                     days = weeks.get(week).getDays();
145                 } else {
146                     weeks.put(week, new WeekModel(weekInMonth, month + "月第" + weekInMonth + "周", days));
147                     
148                     monthWeekCount++;
149                     weekCount++;
150                     monthModel.setWeekCount(monthWeekCount);
151                     yearModel.setWeekCount(weekCount);
152                 }
153                 
154                 String weekDay = getWeekDay(cal);
155                 days.put(week + "_" + weekDay, new DayModel(cal.get(Calendar.DAY_OF_MONTH), weekDay, getSimpleWeekDay(cal), beginDate));
156                 /*
157                 System.out.println("日期:" + DateFormatUtils.format(beginDate, DATE_FORMAT));
158                 System.out.println("年份:" + cal.getWeekYear());
159                 System.out.println("月份:" + (cal.get(Calendar.MONTH) + 1));
160                 System.out.println("星期:" + cal.get(Calendar.DAY_OF_WEEK));
161                 System.out.println("本月周次:" + cal.get(Calendar.WEEK_OF_MONTH));
162                 System.out.println();
163                 */
164                 beginDate = DateUtils.addDays(beginDate, 1);
165             } while (beginDate.compareTo(endDate) <= 0);
166             
167         } catch (Exception e) {
168             e.printStackTrace();
169         }
170         return years;
171     }
172     
173     public static Map<Integer, YearModel> get(Date beginDate, Date endDate, boolean hasMonFirstWeekDay) {
174         
175         try {
176             return get(DateFormatUtils.format(beginDate, DATE_FORMAT), DateFormatUtils.format(endDate, DATE_FORMAT), hasMonFirstWeekDay);
177         } catch (Exception e) {
178             e.printStackTrace();
179         }
180         return null;
181     }
182 
183     public static class YearModel {
184         private int yearName;
185         private String displayName;
186         private int weekCount;
187         private Map<Integer, MonthModel> months;
188         
189         public YearModel(int yearName, String displayName, Map<Integer, MonthModel> months) {
190             super();
191             this.yearName = yearName;
192             this.displayName = displayName;
193             this.months = months;
194         }
195         
196         public int getYearName() {
197             return yearName;
198         }
199         public void setYearName(int yearName) {
200             this.yearName = yearName;
201         }
202         public String getDisplayName() {
203             return displayName;
204         }
205         public void setDisplayName(String displayName) {
206             this.displayName = displayName;
207         }
208         public Map<Integer, MonthModel> getMonths() {
209             return months;
210         }
211         public void setMonths(Map<Integer, MonthModel> months) {
212             this.months = months;
213         }
214         
215         @Override
216         public String toString() {
217             return ReflectionToStringBuilder.toString(this, ToStringStyle.SIMPLE_STYLE);
218         }
219 
220         public int getWeekCount() {
221             return weekCount;
222         }
223 
224         public void setWeekCount(int weekCount) {
225             this.weekCount = weekCount;
226         }
227     }
228     
229     public static class MonthModel {
230         
231         private int monthName;
232         private String displayName;
233         private int weekCount;
234         private Map<String, WeekModel> weeks;
235         
236         public MonthModel(int monthName, String displayName, Map<String, WeekModel> weeks) {
237             super();
238             this.monthName = monthName;
239             this.displayName = displayName;
240             this.weeks = weeks;
241         }
242         
243         public int getMonthName() {
244             return monthName;
245         }
246         public void setMonthName(int monthName) {
247             this.monthName = monthName;
248         }
249         public String getDisplayName() {
250             return displayName;
251         }
252         public void setDisplayName(String displayName) {
253             this.displayName = displayName;
254         }
255         public Map<String, WeekModel> getWeeks() {
256             return weeks;
257         }
258         public void setWeeks(Map<String, WeekModel> weeks) {
259             this.weeks = weeks;
260         }
261         public int getWeekCount() {
262             return weekCount;
263         }
264         
265         public void setWeekCount(int weekCount) {
266             this.weekCount = weekCount;
267         }
268         @Override
269         public String toString() {
270             return ReflectionToStringBuilder.toString(this, ToStringStyle.SIMPLE_STYLE);
271         }
272     }
273     
274     public static class WeekModel {
275         
276         private int weekName;
277         private String displayName;
278         private Map<String, DayModel> days;
279         
280         public WeekModel(int weekName, String displayName, Map<String, DayModel> days) {
281             super();
282             this.weekName = weekName;
283             this.displayName = displayName;
284             this.days = days;
285         }
286         public int getWeekName() {
287             return weekName;
288         }
289         public void setWeekName(int weekName) {
290             this.weekName = weekName;
291         }
292         public String getDisplayName() {
293             return displayName;
294         }
295         public void setDisplayName(String displayName) {
296             this.displayName = displayName;
297         }
298         public Map<String, DayModel> getDays() {
299             return days;
300         }
301         public void setDays(Map<String, DayModel> days) {
302             this.days = days;
303         }
304         @Override
305         public String toString() {
306             return ReflectionToStringBuilder.toString(this, ToStringStyle.SIMPLE_STYLE);
307         }
308     }
309     
310     public static class DayModel {
311         
312         private int dayName;
313         private String displayName;
314         private String simpleName;
315         private Date date;
316         
317         public DayModel(int dayName, String displayName, String simpleName, Date date) {
318             super();
319             this.dayName = dayName;
320             this.displayName = displayName;
321             this.simpleName = simpleName;
322             this.date = date;
323         }
324         public int getDayName() {
325             return dayName;
326         }
327         public void setDayName(int dayName) {
328             this.dayName = dayName;
329         }
330         public String getDisplayName() {
331             return displayName;
332         }
333         public void setDisplayName(String displayName) {
334             this.displayName = displayName;
335         }
336         public Date getDate() {
337             return date;
338         }
339         public void setDate(Date date) {
340             this.date = date;
341         }
342         public String getSimpleName() {
343             return simpleName;
344         }
345         public void setSimpleName(String simpleName) {
346             this.simpleName = simpleName;
347         }
348         @Override
349         public String toString() {
350             return ReflectionToStringBuilder.toString(this, ToStringStyle.SIMPLE_STYLE);
351         }
352     }
353     
354     public static void main(String[] args) {
355         System.out.println(get("2016-06-01", "2017-07-03", false));
356     }
357 }

一個table頁面展示部分

 1 <style type="text/css">
 2     td {
 3         border: 1px solid black;
 4         background-color: #eeeeee;
 5         padding: 5px;
 6         text-align: center;
 7     }
 8     
 9     table {
10         border-collapse: collapse;
11         border-spacing: 5px;
12         border: 1px solid black;
13     }
14     
15     th {
16         border: 1px solid black;
17         background: #9DACBF;
18         color: #FFF;
19         height: 20px;
20         line-height: 20px
21     }
22     
23     body {
24         font-family: "宋體", "Arial", "Helvetica";
25         font-size: 12px;
26         font-style: normal;
27         font-weight: lighter;
28     }
29     
30     .head {
31         background-color: #ccc;
32         font-weight: bold;
33     }
34     
35     .head b {
36         color: #337ab7;
37     }
38     
39     .odd td {
40         background-color: white;
41     }
42     
43     .even td {
44         background-color: lavender;
45     }
46 </style>
47 
48 <table class="xuenianTable" width="100%" cellspacing="0" cellpadding="0" border="0">
49     <thead>
50         <tr height="55">
51             <th colspan="10" style="font-size: 28px;"> (${param.fileName })教學周歷</th>
52         </tr>
53         <tr height="35">
54             <th width="10%">年份</th>
55             <th width="10%">月份</th>
56             <th width="10%">周次</th>
57             <th width="10%"></th>
58             <th width="10%"></th>
59             <th width="10%"></th>
60             <th width="10%"></th>
61             <th width="10%"></th>
62             <th width="10%" style="color: #f34747;"></th>
63             <th width="10%"	   

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 可用於對比文件是否相同 ...
  • .NET框架下最全面的報表解決方案,支持多種報表導出格式,擁有簡單且強大的報表引擎。本系列教程適合Stimulsoft Reports上手入門。 ...
  • 上個項目中用到了上傳視頻,本來打算用百度的webuploader做的,但是webuploader可能有個毛病就是不能上傳太大的東西。 於是乎,只能換個方法做了啊,看了半天最終決定用傳統的uploaderfile來做。順便吐槽下uploaderfile真的是,和webuploader相比完全是有點複雜 ...
  • 進程:運行應用程式實例 線程:對CPU進行虛擬化。windows為每個進程都提供了該進程專用的線程,這樣當一個進程“假死”,不會影響到其他進程。 線程開銷 線程可以使windows在長時間運行任務可以隨時得到響應,允許用戶使用一個應用程式將已凍結的應用程式強制結束。 線程內核對象(thread ke ...
  • 效果圖: style: xaml.CS: Loaded: emoticons.xml: <?xml version="1.0"?><Emoticons> <Emoticon id="0" tip="微笑">0.gif</Emoticon> <Emoticon id="1" tip="撇嘴">1.gi ...
  • 談及到C#的基本特性,“委托”是不得不去瞭解和深入分析的一個特性。對於大多數剛入門的程式員談到“委托”時,都會想到“將方法作為方法的參數進行傳遞”,很多時候都只是知道簡單的定義,主要是因為“委托”在理解上有較其他特性比較難的地方。在本次說明中,不會將委托的簡單聲明和調用作為重點。 “委托”不需要直接 ...
  • 面向對象的概念 :指以對象的方式來思考問題,在抽象對象的時候,值關心我們關註的點,忽略我們不關註的點 在面向對象中有兩個非常重要的元素:類(Class)和對象(object) 類:類是一個抽象的概念,是一個廣泛的值 對象:具體的個體 類裡面的元素(person):屬性(attribute):描述一類 ...
  • function get_mobile_area($mobile){ header('Content-Type:text/html;charset=gbk'); $url = 'http://life.tenpay.com/cgi-bin/mobile/MobileQueryAttribution. ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...