Re: [J2SE] 求某年某月的當月天數?

看板java作者 (wctang)時間18年前 (2007/08/31 12:11), 編輯推噓2(200)
留言2則, 2人參與, 最新討論串5/5 (看更多)
※ 引述《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
大推! 從此對Calendar class有新的認識..
08/31 13:09, 1F

08/31 15:32, , 2F
謝謝說明哦,讓我了解更多咧
08/31 15:32, 2F
文章代碼(AID): #16rvK0CD (java)
討論串 (同標題文章)
文章代碼(AID): #16rvK0CD (java)