你好,我是使用Java中修改週日歷
Calendar
我想是要改變我的日曆值,並具有以下/前一週持平。
我試圖
Calendar cal = Calendar.getInstance();
cal.set(Calendar.DATE, cal.DATE-7);
但它的行爲古怪
你好,我是使用Java中修改週日歷
Calendar
我想是要改變我的日曆值,並具有以下/前一週持平。
我試圖
Calendar cal = Calendar.getInstance();
cal.set(Calendar.DATE, cal.DATE-7);
但它的行爲古怪
你必須做這樣的事情:
public static void main(String[] args) {
Calendar cal = Calendar.getInstance();
System.out.println(cal.getTime());
cal.set(Calendar.WEEK_OF_YEAR, cal.get(Calendar.WEEK_OF_YEAR)-1);
System.out.println(cal.getTime());
}
希望這有幫助,玩得開心!
你應該使用類似替代以下幾點:
c.add(Calendar.WEEK_OF_YEAR, -1);
你的代碼是完全錯誤的。 cal.DATE-7
並不意味着「今天7天前」。 Calendar.DATE
只是一個常數,用於指定Calendar
的字段類型。
下週。
LocalDate.now(ZoneId.of("America/Montreal"))
.plusWeeks(1L)
上週。
LocalDate.now(ZoneId.of("America/Montreal"))
.minusWeeks(1L)
現代的方式是與取代麻煩的老傳統類,如Calendar
& Date
的java.time類。
LocalDate
的LocalDate
類表示沒有時間一天和不同時區的日期,唯一的價值。
時區對確定日期至關重要。對於任何特定的時刻,日期因地區而異。例如,Paris France午夜後幾分鐘是新的一天,而在Montréal Québec仍然是「昨天」。
在continent/region
的格式指定一個proper time zone name,如America/Montreal
,Africa/Casablanca
,或Pacific/Auckland
。切勿使用3-4字母縮寫,如EST
或IST
,因爲它們是而不是真正的時區,不是標準化的,甚至不是唯一的(!)。
ZoneId z = ZoneId.of("America/Montreal");
LocalDate today = LocalDate.now(z);
添加或一個LocalDate
減去周很容易。致電plusWeeks
或minusWeeks
方法。
LocalDate nextWeek = today.plusWeeks(1L);
LocalDate lastWeek = today.minusWeeks(1L);
的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。
「行爲怪異」是什麼意思? – talnicolas 2012-03-12 16:12:05
它給了我不好的約會,例如,如果我採取行動7,有時它會減少一個月或類似的事情 – joris 2012-03-12 16:14:19