2012-03-20 82 views
0

如何在月和年輸入參數時生成Calendar生成給定月份和年份的日曆

注意:我已經計算了一個月中包含的天數。

+1

「注意:我已經計算出每月包含的天數。」 a)你可能做錯了。很難做到這一點 - 有很多規則。 b)框架中已經有代碼可以爲你做到這一點。爲什麼自己寫? – 2012-03-20 13:23:45

+0

@Mark Byers:有完整代碼的鏈接嗎? – Nitish 2012-03-20 13:32:45

回答

1

爲什麼不能這樣?

Calendar cal = Calendar.getInstance(); 
cal.set(Calendar.YEAR, year); 
cal.set(Calendar.MONTH, month); 
0
Calendar calendar = Calendar.getInstance(); 
calendar.set(Calendar.MONTH, Calendar.MAY); // note this is a 0-11 value for jan-dec 
calendar.set(Calendar.DATE, 20); // pick the 20th day...or whatever from input 

注意,做這種方式會自動重新計算其餘字段(如多少天都在一個月,等)。您還可以使用日曆上的add()函數來添加日期,並且它也會考慮所有這些。

參見:http://docs.oracle.com/javase/6/docs/api/java/util/Calendar.html

2
Calendar c = Calendar.getInstance(); 
c.set(Calendar.MONTH, month); // 0-based 
c.set(Calendar.YEAR, year); 

當然,我建議使用joda-timeDateTime代替Calendar日期時操作。

+0

我們將什麼設置到日曆實例以及如何繼續? – Nitish 2012-03-20 13:31:24

+0

你說你有月份和年份。這就是你說的。 (見javadoc) – Bozho 2012-03-20 13:36:28

+0

好吧,我們正在設定月份和年度,但下一步會是什麼?我之前沒有使用過日曆實例。那麼有詳細的描述? – Nitish 2012-03-20 13:44:05

0

使用java.time

現代的方式是與取代麻煩的老傳統Calendar & Date類java.time類。

YearMonth

YearMonth類代表,那麼,一年一個月,沒有任何日期或或時區天時間 - 。

YearMonth ym = YearMonth.of(2017 , Month.MARCH); 

LocalDate

您可以生成一個LocalDate

LocalDate firstOfMonth = ym.atDay(1); 
LocalDate endOfMonth = ym.atEndOfMonth(); 

如果你想在兩者之間的日期,循環。一次增加日期一天。檢查每天是否仍然在相同的YearMonth。如果不是,你增加得太多,可以停止。

List<LocalDate> dates = new ArrayList<>(31); 
LocalDate localDate = ym.atDay(1); 
while (YearMonth.from(localDate).equals(ym) { 
    dates.add(localDate); 
    // Set up the next loop. 
    localDate = localDate.plusDays(1); 
} 

關於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,YearQuartermore

相關問題