Re: [J2SE] 求某年某月的當月天數?
※ 引述《kennyliao (aggressive)》之銘言:
: c.set(...)有好幾個overloading的方法,
: 黃色那行我加上去之後,就跟您用的 c.set(year, month, day)意思一樣..
: 我想了一下,之前第一篇之所以會錯的原因,是因為我設了year, month
: 但是沒有設day 的值,所以它就抓當日(ex:昨天是8/30)
: 好笑的事情來了… 我傳一個(2007,2)讓它set year, month 但是 day呢????
: 像昨天是30日啊!!! --> 2007.2.30 ...... Orz ....
: 這樣正好符合kithe大大跑這隻鳥程式的結果,當日是29,30,31日就會出錯…
: 感謝各位幫忙><"
看到這個問題,我來談談我對 Calendar 這個 class 的理解,也代表對 java 幾個
時間相關 class 的理解。
java 用 Date 代表一個時間點,但因為對某個特定時間世界各地的說法都不同,至
於要怎麼說出一個時間點,其實就是要一本日曆來做對照,而 Calendar 就是用來
代表類似曆法或是某種特定的日曆,所以 Calendar 和地區 (Locale) 和 時區
(TimeZone) 有關,所以我感覺 Calendar 應該是種工具 class,用來把某個特定的
時間點轉換為用這本日曆表示的方式,或是把這本日曆翻到某個時間並取得這個時間
點的 Date。至於 DateFormat 呢,就是把由 Calendar 轉換出來的時間格式用各種
不同的排列方式用字串呈現出來。
所以,如果已有某個時間點的 Date 要知道年月日,理論上就要用建一本日曆,把時
期指定給日曆,再由日曆中取得特定的資料。例如理論上可以有這樣的用法:
Date now = new Date();
Calendar calendar = new 農民曆();
calendar.setTime(now);
calendar.get(農民曆.宜); // may be 祭祀 動土 之類的...
而如果是想要指定日曆上特定時間點而取得 Date,就要用 set 來指定,例如這種用
法:
Calendar calendar = new 光緒曆();
calendar.clear();
calendar.set(光緒曆.年, 3);
calendar.set(光緒曆.節氣, 光緒曆.夏至);
Date t = calendar.getTime();
但因為 Calendar.getInstance 預設回傳 GregorianCalendar,而且預設為當下的時
間,所以常常看到有人把 Calendar 當 Date 來用,我覺得這是種誤用,但如果沒這
種預設的行為又會變得很難用,所以把這些 class 的職責理解清楚,也就不容易出
錯了。
嗯,好像太認真了...
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.125.148.101
推
08/31 13:09, , 1F
08/31 13:09, 1F
推
08/31 15:32, , 2F
08/31 15:32, 2F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 5 之 5 篇):