[英]Why is Java Calendar saying the first Thursday of the month is Week 5?
我想弄清楚如何在一周的特定日期發出警報。 這是打印我期望的示例代碼:
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.WEEK_OF_MONTH, 1);
System.out.println("Week of month: " + calendar.get(Calendar.WEEK_OF_MONTH)); // Week of month: 1
但是,當我將其添加到代碼中時,我得到的結果我不明白:
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.DAY_OF_WEEK, Calendar.THURSDAY);
calendar.set(Calendar.WEEK_OF_MONTH, 1);
System.out.println("Week of month: " + calendar.get(Calendar.WEEK_OF_MONTH)); // Week of month: 5
我試圖在特定的一周內為特定日期設置警報。 今天的日期是2013年6月15日。有人可以向我解釋一下。 Joda時間不是我正在做的選擇,所以我需要使用常規Java庫來完成這項工作。 謝謝你的幫助。
上面的代碼將根據它運行的日期返回不同的結果,因為Calendar.getInstance()
返回一個設置為當前時間的Calendar。 有關與當前時間無關的問題的說明,請使用以下命令:
DateFormat dateFormat = DateFormat.getDateInstance();
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(1371294000000L);
System.out.println(dateFormat.format(calendar.getTime()));
calendar.set(Calendar.DAY_OF_WEEK, Calendar.THURSDAY);
System.out.println(dateFormat.format(calendar.getTime()));
calendar.set(Calendar.WEEK_OF_MONTH, 1);
System.out.println("Week of month: " + calendar.get(Calendar.WEEK_OF_MONTH));
System.out.println(dateFormat.format(calendar.getTime()));
哪個輸出這樣的東西(至少如果您的默認語言環境使用公歷):
Jun 15, 2013
Jun 13, 2013
Week of month: 5
May 30, 2013
默認情況下,Java Calendar是寬松的。 如果將其設置為1月32日,則會將其轉換為2月1日。此外,“周”的定義是特定於區域設置的,有點令人困惑。 這在上面鏈接的JavaDocs中有詳細解釋。
在您的特定情況下(或至少在我的區域設置中),一周被定義為從星期日開始,“六月的第一周”被定義為包括6月1日的星期日到星期六的時間段。2013年6月1日是星期六,2013年第22周的最后一天。2013年6月2日星期日,是6月第2周的第一天,而不是第1周的第二天。
由於6月第1周沒有星期四,因此寬松日歷將DAY_OF_WEEK, THURSDAY
解釋為2013年第22周的星期四,即2013年5月30日,即5月的第5周,因此您獲得5而不是1在你的輸出中。
要設置6月的第一個星期四,您需要:
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.MONTH, Calendar.JUNE);
calendar.set(Calendar.DAY_OF_WEEK, Calendar.THURSDAY);
calendar.set(Calendar.DAY_OF_WEEK_IN_MONTH, 1);
DAY_OF_WEEK_IN_MONTH
可能有點令人困惑。 您可以將它與DAY_OF_WEEK
一起使用,以指定您想要的那一天中哪一天。 因此,當DAY_OF_WEEK
設置為星期四時, DAY_OF_WEEK_IN_MONTH, 1
是該月的第一個星期四, DAY_OF_WEEK_IN_MONTH, 2
是該月的第二個星期四,等等。這遠遠少於特定於語言環境或開放(錯誤)解釋然后是什么日子構成這個月的第一周。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.