安卓18开发文档翻译:GregorianCalendar
extends Calendar
↳ |
||
↳ |
java.util.GregorianCalendar |
GregorianCalendar 是 Calendar 的一个实体子类,提供了世界上大部分人所使用的标准日历。
标准(公历(Gregorian))日历,包含两个时期,公元前(BC)和公元后(AD)。
这个实现中,能够处理单个的日期间断,默认情况下,对应于公历被制订的日期(在某些国家,是1582 年10月 15 日,其它国家的日期更迟)。调用者,可通过调用 setGregorianChange() 来改变被砍掉的日期。
由于历史原因,在那些率先开始采用公历的国家,1582 年10月4日的下一天是1582 年10月15日。这个日历实现中,正确地处理了这个问题。对于位于公历砍掉的日期之前的日期, GregorianCalendar 实现的是儒略历(Julian)。 公历 与儒略历之间唯一的差别就是闰年规则。儒略 历中,每隔4年都是一个闰年,而公历中呢,对于那些 不能被400 整 除 的整百年份则不当作是闰年。
GregorianCalendar实现的是 预计算的 公历和儒略历。也就是说,会根据当前的规则,向前及向后无限计算,以产生日期数据。这样,就可以用 GregorianCalendar 来针对所有年份计算出有意义和稳定的结果。然而,使用 GregorianCalendar 获取到的日期,出于历史原因,仅仅是从公元后4年3月1日开始往后的日期才是准确的,在那之前采用的是儒略历规则。在那个日子之前,闰年的规则是不符合常规的,并且,在公元前45年之前,儒略历甚至也不存在。
在采用公历之前,新年的日子是3月25日。为了避免混淆,此日历实现中会一直使用1月1日。如果说希望对于公历之前的日子采用另一个不同的新年日子,并且要采用的日子位于1月1日和3月24日之间的话,则可以进行手动的调整。
对于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 年最开始的3天属于1997 年的第53 个星期。
对于WEEK_OF_MONTH 字段,计算出来的值的范围是0或1到4或5。一个月中的第1个星期(对应着 WEEK_OF_MONTH = 1 的那些天),指的是,满足以下条件的最早的那几天:该月中的最少 getMinimalDaysInFirstWeek() 个连续天;结束于 getFirstDayOfWeek() 之前的那一天。与一年中的第1个星期不同,一个月中的第1个星期可以少于7天,不需要从 getFirstDayOfWeek()开始 ,并且不会包含上一个月的日子。一个月中,第1个星期之前的那些日子,其 WEEK_OF_MONTH 为0。
例如,如果getFirstDayOfWeek() 是星期天( SUNDAY ),并且 getMinimalDaysInFirstWeek() 是4,则,1998 年1月的第一个星期是从1月4日星期天到1月10日星期六。对于这些日子, WEEK_OF_MONTH 为1。1月1日星期四到1月3日星期六,那些日子,其 WEEK_OF_MONTH 为0。如果 getMinimalDaysInFirstWeek() 被改为3,则,1月1日到1月3日的 WEEK_OF_MONTH 为1。
示例:
//获取支持GMT-08:00(太平洋标准时间)(Pacific Standard Time)的那些编号(ids)
String[] ids = TimeZone.getAvailableIDs(-8 * 60 * 60 * 1000);
// 如果未返回任何编号,则出错了。停止工作。
if (ids.length == 0)
System.exit(0);
// 开始输出内容
System.out.println("Current Time");
// 创建一个太平洋标准时间的时区
SimpleTimeZone pdt = new SimpleTimeZone(-8 * 60 * 60 * 1000, ids[0]);
// 设置规则,指明日光节省时
pdt.setStartRule(Calendar.APRIL, 1, Calendar.SUNDAY, 2 * 60 * 60 * 1000);
pdt.setEndRule(Calendar.OCTOBER, -1, Calendar.SUNDAY, 2 * 60 * 60 * 1000);
// 使用太平洋日光时区创建一个GregorianCalendar,并且设置其日期时间为当前日期时间
Calendar calendar = new GregorianCalendar(pdt);
Date trialTime = new Date();
calendar.setTime(trialTime);
// 输出一砣有趣的信息
System.out.println("ERA: " + calendar.get(Calendar.ERA));
System.out.println("YEAR: " + calendar.get(Calendar.YEAR));
System.out.println("MONTH: " + calendar.get(Calendar.MONTH));
System.out.println("WEEK_OF_YEAR: " + calendar.get(Calendar.WEEK_OF_YEAR));
System.out.println("WEEK_OF_MONTH: " + calendar.get(Calendar.WEEK_OF_MONTH));
System.out.println("DATE: " + calendar.get(Calendar.DATE));
System.out.println("DAY_OF_MONTH: " + calendar.get(Calendar.DAY_OF_MONTH));
System.out.println("DAY_OF_YEAR: " + calendar.get(Calendar.DAY_OF_YEAR));
System.out.println("DAY_OF_WEEK: " + calendar.get(Calendar.DAY_OF_WEEK));
System.out.println("DAY_OF_WEEK_IN_MONTH: "
+ calendar.get(Calendar.DAY_OF_WEEK_IN_MONTH));
System.out.println("AM_PM: " + calendar.get(Calendar.AM_PM));
System.out.println("HOUR: " + calendar.get(Calendar.HOUR));
System.out.println("HOUR_OF_DAY: " + calendar.get(Calendar.HOUR_OF_DAY));
System.out.println("MINUTE: " + calendar.get(Calendar.MINUTE));
System.out.println("SECOND: " + calendar.get(Calendar.SECOND));
System.out.println("MILLISECOND: " + calendar.get(Calendar.MILLISECOND));
System.out.println("ZONE_OFFSET: "
+ (calendar.get(Calendar.ZONE_OFFSET)/(60*60*1000)));
System.out.println("DST_OFFSET: "
+ (calendar.get(Calendar.DST_OFFSET)/(60*60*1000)));
System.out.println("Current Time, with hour reset to 3");
calendar.clear(Calendar.HOUR_OF_DAY); // so doesn't override
calendar.set(Calendar.HOUR, 3);
System.out.println("ERA: " + calendar.get(Calendar.ERA));
System.out.println("YEAR: " + calendar.get(Calendar.YEAR));
System.out.println("MONTH: " + calendar.get(Calendar.MONTH));
System.out.println("WEEK_OF_YEAR: " + calendar.get(Calendar.WEEK_OF_YEAR));
System.out.println("WEEK_OF_MONTH: " + calendar.get(Calendar.WEEK_OF_MONTH));
System.out.println("DATE: " + calendar.get(Calendar.DATE));
System.out.println("DAY_OF_MONTH: " + calendar.get(Calendar.DAY_OF_MONTH));
System.out.println("DAY_OF_YEAR: " + calendar.get(Calendar.DAY_OF_YEAR));
System.out.println("DAY_OF_WEEK: " + calendar.get(Calendar.DAY_OF_WEEK));
System.out.println("DAY_OF_WEEK_IN_MONTH: "
+ calendar.get(Calendar.DAY_OF_WEEK_IN_MONTH));
System.out.println("AM_PM: " + calendar.get(Calendar.AM_PM));
System.out.println("HOUR: " + calendar.get(Calendar.HOUR));
System.out.println("HOUR_OF_DAY: " + calendar.get(Calendar.HOUR_OF_DAY));
System.out.println("MINUTE: " + calendar.get(Calendar.MINUTE));
System.out.println("SECOND: " + calendar.get(Calendar.SECOND));
System.out.println("MILLISECOND: " + calendar.get(Calendar.MILLISECOND));
System.out.println("ZONE_OFFSET: "
+ (calendar.get(Calendar.ZONE_OFFSET)/(60*60*1000))); // in hours
System.out.println("DST_OFFSET: "
+ (calendar.get(Calendar.DST_OFFSET)/(60*60*1000))); // in hours
参考:
自此版本开始引入 应用编程接口级别1
构造一个新的 GregorianCalendar ,并且使用默认的语系( Locale )和时区( TimeZone )来将它初始化为当前的日期和时间。
自此版本开始引入 应用编程接口级别1
构造一个新的 GregorianCalendar ,并且使用默认的语系( Locale )和时区( TimeZone )来将它初始化为指定的日期和时间。
参数 |
|
year |
int: 年。 |
month |
int: 月。 |
day |
int: 月份中的日子。 |
hour |
int: 小时。 |
minute |
int: 分钟。 |
未知美人
色狗
HxLauncher: Launch Android applications by voice commands