2011-06-01 84 views
1

我的計劃Java日曆類設置爲May-31Java日曆類不返回五月-31

當我試圖獲得最大的無天在5月份,它的返回31.這是確定的。

int days = c.getActualMaximum(Calendar.DAY_OF_MONTH); 
System.out.println("Month:" + days); 

但是,當我試圖讓Calendar.MONTHCalendar.DAY_OF_MONTH

它總是返回六月-1

+2

您是否可以更新您的問題並提供更多詳細信息,理想情況下是不適合您的實際代碼? – maerics 2011-06-01 02:25:10

回答

4

與所有其他日曆領域,月份是從零開始的;一月= 0,日= 1,......,這意味着月是月數,不是5

當您月份設置爲5和日至31日,你想將它設置爲 31,它轉換爲7月 1,六月只有30天。

+0

由於代碼片段打印31,這很難解釋觀察到的行爲。正如你所說,六月只有30天。 – 2018-01-28 21:38:09

0

getActualMaximum()返回該字段的最大值。

  • getActualMaximum(Calender.DAY_OF_MONTH)返回31天的最高金額在一個月
  • getActualMaximum(Calender.DAY_OF_WEEK)將返回7天的最高金額在一週

Calendar.MONTHCalendar.DAY_OF_MONTH不會自動設置爲日期,所以恢復其默認值,6月1日

嘗試

Calendar c = Calendar.getInstance(); 

應該將它設置爲今天的日期。

-1

你一定的Calendar()創建實例後添加一行。

例如:

Calendar cal = Calendar.getInstance(); 
cal.clear(); 

它會奏效。

1

TL;博士

YearMonth.from( 
    LocalDate.of(2018 , Month.MAY , 31) 
).lengthOfMonth() 
LocalDate.of(2018 , Month.MAY , 31) 
     .getMonthValue() 
LocalDate.of(2018 , Month.MAY , 31) 
     .getYear() 

java。時間

您的問題未提供足夠的詳細資料以診斷問題。但問題是沒有實際意義,現在有更好的替代方法。

麻煩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) ; 

詢問length of the month

int lengthOfMonth = ym.lengthOfMonth() ; 

LocalDate可以給你的日子的日和年數。

int dayOfMonth = ld.getMonthValue() ; 
int year = ld.getYear() ; 

關於java.time

java.time框架是建立在Java 8和更高版本。這些類代替了日期時間類legacy,如java.util.Date,Calendar,& SimpleDateFormat

Joda-Time項目現在位於maintenance mode,建議遷移到java.time類。請參閱Oracle Tutorial。並搜索堆棧溢出了很多例子和解釋。規格是JSR 310

從何處獲取java.time類?