作者wctang (wctang)
看板java
标题Re: [J2SE] 求某年某月的当月天数?
时间Fri Aug 31 12:11:43 2007
※ 引述《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
1F:推 kennyliao:大推! 从此对Calendar class有新的认识.. 08/31 13:09
2F:推 alexcwtzeng:谢谢说明哦,让我了解更多咧 08/31 15:32