我的計劃Java日曆類設置爲May-31Java日曆類不返回五月-31
當我試圖獲得最大的無天在5月份,它的返回31.這是確定的。
int days = c.getActualMaximum(Calendar.DAY_OF_MONTH);
System.out.println("Month:" + days);
但是,當我試圖讓Calendar.MONTH
和Calendar.DAY_OF_MONTH
它總是返回六月-1
我的計劃Java日曆類設置爲May-31Java日曆類不返回五月-31
當我試圖獲得最大的無天在5月份,它的返回31.這是確定的。
int days = c.getActualMaximum(Calendar.DAY_OF_MONTH);
System.out.println("Month:" + days);
但是,當我試圖讓Calendar.MONTH
和Calendar.DAY_OF_MONTH
它總是返回六月-1
與所有其他日曆領域,月份是從零開始的;一月= 0,日= 1,......,這意味着月是月數,不是5
當您月份設置爲5和日至31日,你想將它設置爲月 31,它轉換爲7月 1,六月只有30天。
由於代碼片段打印31,這很難解釋觀察到的行爲。正如你所說,六月只有30天。 – 2018-01-28 21:38:09
getActualMaximum()
返回該字段的最大值。
getActualMaximum(Calender.DAY_OF_MONTH)
返回31天的最高金額在一個月getActualMaximum(Calender.DAY_OF_WEEK)
將返回7天的最高金額在一週Calendar.MONTH
和Calendar.DAY_OF_MONTH
不會自動設置爲日期,所以恢復其默認值,6月1日
嘗試
Calendar c = Calendar.getInstance();
應該將它設置爲今天的日期。
它在細節上的日曆的javadoc的解釋: http://download.oracle.com/javase/1.5.0/docs/api/java/util/Calendar.html
你一定的Calendar()
創建實例後添加一行。
例如:
Calendar cal = Calendar.getInstance();
cal.clear();
它會奏效。
YearMonth.from(
LocalDate.of(2018 , Month.MAY , 31)
).lengthOfMonth()
LocalDate.of(2018 , Month.MAY , 31)
.getMonthValue()
LocalDate.of(2018 , Month.MAY , 31)
.getYear()
您的問題未提供足夠的詳細資料以診斷問題。但問題是沒有實際意義,現在有更好的替代方法。
麻煩Calendar
類現在是遺留下來的,用java.time類代替。
代表一個月的現代方法使用YearMonth
類。
YearMonth ym = YearMonth.of(2018 , Month.MAY) ;
還有一個YearMonth
從一個日期。
LocalDate ld = LocalDate.of(2018 , Month.MAY , 31) ;
YearMonth ym = YearMonth.from(ld) ;
int lengthOfMonth = ym.lengthOfMonth() ;
的LocalDate
可以給你的日子的日和年數。
int dayOfMonth = ld.getMonthValue() ;
int year = ld.getYear() ;
的java.time框架是建立在Java 8和更高版本。這些類代替了日期時間類legacy,如java.util.Date
,Calendar
,& SimpleDateFormat
。
Joda-Time項目現在位於maintenance mode,建議遷移到java.time類。請參閱Oracle Tutorial。並搜索堆棧溢出了很多例子和解釋。規格是JSR 310。
從何處獲取java.time類?
您是否可以更新您的問題並提供更多詳細信息,理想情況下是不適合您的實際代碼? – maerics 2011-06-01 02:25:10