簡體   English   中英

Java:GregorianCalendar返回錯誤的數據

[英]Java: GregorianCalendar returns wrong data

我想計算一年中特定星期幾的星期一。 我是這樣做的:

final GregorianCalendar calendar = new GregorianCalendar(Locale.GERMANY);
calendar.clear();
calendar.set(Calendar.YEAR, 2012); // set to 2012
calendar.set(Calendar.WEEK_OF_YEAR, 20); // set to week number 20
calendar.setTimeZone(TimeZone.getTimeZone("Europe/Berlin")); // set time zone

SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yy"); // german format
System.out.println(sdf.format(calendar.getTime())); // return date

這必須返回2012年5月14日(德語格式為14.05.12),但是它返回2012年5月16日,但這是錯誤的。

因此,對於2012年,其+2、2011年為正確,而2010年為-1。

為什么GregorianCalendar計算錯誤的日期?

在此先感謝並感謝德國。

這將取決於getFirstDayOfWeek()返回的內容以及1月1日的哪一天。

從Javadocs:

為WEEK_OF_YEAR字段計算的值的范圍為1到53。一年的第1周是最早的7天時段,從getFirstDayOfWeek()開始,該日期至少包含該年的getMinimalDaysInFirstWeek()天。 因此,它取決於getMinimalDaysInFirstWeek(),getFirstDayOfWeek()和1月1日的星期幾的值。將一年的第1周和次年的第1周之間的周從2到52或53依次編號(如需要)。

例如,1998年1月1日是星期四。 如果getFirstDayOfWeek()為MONDAY且getMinimalDaysInFirstWeek()為4(這些值反映了ISO 8601和許多國家標准),則1998年的第1周從1997年12月29日開始,到1998年1月4日結束。 getFirstDayOfWeek()是SUNDAY,則1998年的第1周從1998年1月4日開始,到1998年1月10日結束; 1998年的前三天是1997年第53周的一部分。

也嘗試設置DAY_OF_WEEK

final GregorianCalendar calendar = new GregorianCalendar(Locale.GERMANY);
calendar.clear();
calendar.set(Calendar.YEAR, 2012); // set to 2012
calendar.set(Calendar.WEEK_OF_YEAR, 20); // set to week number 20
calendar.set( Calendar.DAY_OF_WEEK, Calendar.MONDAY ); //set day to monday
calendar.setTimeZone(TimeZone.getTimeZone("Europe/Berlin")); // set time zone

SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yy"); // german format
System.out.println(sdf.format(calendar.getTime())); // return date

為我返回14.05.12、16.05.11和17.05.10。

編輯:

因此,對於2012年,其+2、2011年為正確,而2010年為-1。

如果我正確理解,您會得到16.05.10、16.05.11和16.05.12,對嗎? 這表示日歷的一部分已被重用。 您是否有機會從2011年開始連續測試? 如果是這樣,僅更改年份而沒有任何clear()等將保留先前計算的日期。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM