TL;博士
傳統的方法來確定某一天的週數定義ISO 8601(週一至週日,1-7):
int dayOfWeekISO = cal.get(Calendar.DAY_OF_WEEK) - 1 ;
if(dayOfWeekISO == 0) { // For Sunday (1 - 1 = 0), add 7.
dayOfWeekISO = (dayOfWeekISO + 1) ;
}
現代方式:
LocalDate.of(2017 , Month.JULY , 30) // Date-only value.
.getDayOfWeek() // `DayOfWeek.SUNDAY` enum object.
.getValue() // 7 for Sunday. (1 = Monday, per ISO 8601 standard.)
詳細信息
accepted answer by Maia是正確的:Those int
constants on Calendar
定義一週爲1-7爲Sunday-星期六,根據美國的習俗。
DAY_OF_WEEK
公共靜態最終詮釋DAY_OF_WEEK
場數get和set表示星期幾。該字段的值爲星期日,星期一,星期二,星期三,星期四,星期五和星期六。
如果你絕對不能添加一個圖書館,那麼你必須從一個星期是星期日至星期六1-7的Calendar
定義調整。把錢放在第一位,減去1,然後檢查你添加的0。
int dayOfWeekISO = cal.get(Calendar.DAY_OF_WEEK) - 1 ;
if(dayOfWeekISO == 0) { // For Sunday (1 - 1 = 0), add 7.
dayOfWeekISO = (dayOfWeekISO + 1) ;
}
通過走另一條路,從ISO 8601風格,美國風格(星期日第一)的方式,計算modulo 7,然後加1
(DayOfWeek.SUNDAY.getValue() % 7) + 1
像這樣:
System.out.println((DayOfWeek.SUNDAY.getValue() % 7) + 1) ;
System.out.println((DayOfWeek.MONDAY.getValue() % 7) + 1) ;
System.out.println((DayOfWeek.TUESDAY.getValue() % 7) + 1) ;
System.out.println((DayOfWeek.WEDNESDAY.getValue() % 7) + 1) ;
System.out.println((DayOfWeek.THURSDAY.getValue() % 7) + 1) ;
System.out.println((DayOfWeek.FRIDAY.getValue() % 7) + 1) ;
System.out.println((DayOfWeek.SATURDAY.getValue() % 7) + 1) ;
但不要考慮添加a library of modern date-time classes。值得爲你的項目添加一個jar的麻煩。那些舊的日期時間課程確實很糟糕。
避免遺留日期時類
的Calendar
類是麻煩的舊的遺留日期時間類,現在java.time類取代的一部分。
java.time
的java.time.DayOfWeek
枚舉是標準的,表示由ISO 8601其中每週從週一到週日定義的一週,編號爲1-7。
LocalDate
類代表沒有時間和沒有時區的僅有日期的值。
LocalDate ld = LocalDate.of(2017 , Month.JULY , 30) ;
DayOfWeek dow = ld.getDayOfWeek() ;
int dowNumber = dow.getValue() ;
String output = dow.getDisplayName(TextStyle.FULL , Locale.CANADA_FRENCH) ;
請參閱this code run live at IdeOne.com。
ld.toString():2017年7月30日
dow.toString():星期日
dowNumber:7
輸出:星期日
關於java.time
java.time框架內置於Java 8及更高版本。這些類取代了日期時間類legacy,如java.util.Date
,Calendar
,& SimpleDateFormat
。
Joda-Time項目現在位於maintenance mode,建議遷移到java.time類。請參閱Oracle Tutorial。並搜索堆棧溢出了很多例子和解釋。規格是JSR 310。
從何處獲取java.time類?
的ThreeTen-Extra項目與其他類擴展java.time。這個項目是未來可能增加java.time的一個試驗場。您可以在這裏找到一些有用的類,如Interval
,YearWeek
,YearQuarter
和more。
當然,你是對的。沒有枚舉,常量。我已經根據這個改變了答案。 – Maia