Calendar類set方法中的坑

2022-04-21 16:46:19 字數 1338 閱讀 2318

在仔細一查發現工具類中有乙個獲取月份最大值,問題就出現在這裡咯。**很簡單

public

static

int lastday(int

month)

然後我發現無論傳什麼進去最大值都是31。

在system.out.println(calendar.gettime());列印出當前時間看看。發現如果傳進去的月份有31號,那麼就列印當月31號,如果沒有31號就為下個月的1號。輸入二月時輸出為3號。

輸入二月份debug一下,

calendar.getinstance()值為2019-10-31如下圖

calendar.set(calendar.month, 2-1)設定為二月如下圖,發現day_of_month=31,依然為31號

system.out.println(calendar.gettime())一下,輸出為2019-03-03,2019-02-31轉為2019-03-03

calendar.getactualmaximum(calendar.day_of_month)輸出值為31,由此可見,不能只設定月份,要整個clear掉,重新設定年月,這樣才會根據月份取最大值,不然會取到day_of_month的值。

解決方案一:

/**

* 獲取某年某月的日期最大值

* @param

year 年份

* @param

month 月份

* @return

最大值

*/public

static

int lastday(int year , int

month)

calendar.set(calendar.month, month-1);

int maxday =calendar.getactualmaximum(calendar.day_of_month);

return

maxday;

}

解決方案二:

/**

* 根據年月獲取當月最後一天

* @param

yearmonth yyyy-mm

* @return

yyyy-mm-dd

* @throws

parseexception

*/public

static

string getlastdayofmonth(string yearmonth)

catch

(parseexception e)

return

null

; }

Calendar類set 方法的問題

首先我是看了這個博主的文章 裡面已經詳細的解釋了set方法的 陷阱 以及解決辦法,我只是發現了另乙個有意思的事 新的calendar例項之所以沒有生效是因為set值的時候沒有set日導致的,就好像是你已經set年 set月,系統就等著你set日呢,結果你不set了,導致後邊再用這個物件的時候它仍然記...

常用類 Calendar類

calendar類概述及其方法 calendar 類是乙個抽象類,它為特定瞬間與一組諸如 year month day of month hour 等 日曆字段之間的轉換提供了一些方法,並為操作日曆字段 例如獲得下星期的日期 提供了一些方法。成員方法 public static calendar g...

Date類 Calendar類的常用方法及運用

需求 1.根據生日計算年齡 2.獲取輸入日期的星期幾 3.獲取輸入日期的當月第一天 4.獲取輸入日期的當月最後一天 5.判斷該年是否是閏年 6.根據整型數表示的年月日,生成日期型別格式 public class birthday nowtime 獲取輸入日期的當月第一天 int firstday c...