GregorianCalendar类的学习

title="Style" href="../../stylesheet.css" type="text/css" rel="stylesheet"><script type="text/javascript"> function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { parent.document.title="GregorianCalendar (Java 2 Platform SE 6)"; } } </script>
public class GregorianCalendar
   
   
    
    extends Calendar
   
   

GregorianCalendarCalendar 的一个具体子类,提供了世界上大多数国家/地区使用的标准日历系统。

GregorianCalendar 是一种混合日历,在单一间断性的支持下同时支持儒略历和格里高利历系统,在默认情况下,它对应格里高利日历创立时的格里高利历日期(某些国家/地区是在 1582 年 10 月 15 日创立,在其他国家/地区要晚一些)。可由调用者通过调用 setGregorianChange() 来更改起始日期。

历史上,在那些首先采用格里高利历的国家/地区中,1582 年 10 月 4 日(儒略历)之后就是 1582 年 10 月 15 日(格里高利历)。此日历正确地模拟了这些变化。在开始格里高利历之前,GregorianCalendar 实现的是儒略历。格里高利历和儒略历之间的唯一区别就是闰年规则。儒略历指定每 4 年就为闰年,而格里高利历则忽略不能被 400 整除的世纪年。

GregorianCalendar 可实现预期的 格里高利历和儒略历。也就是说,可以通过在时间上无限地向后或向前外推当前规则来计算日期。因此,对于所有的年份,都可以使用 GregorianCalendar 来生成有意义并且一致的结果。但是,采用现代儒略历规则时,使用 GregorianCalendar 得到的日期只在历史上从公元 4 年 3 月 1 日之后是准确的。在此日期之前,闰年规则的应用没有规则性,在 45 BC 之前,甚至不存在儒略历。

在格里高利历创立以前,新年是 3 月 25 日。为了避免混淆,此日历始终使用 1 月 1 日为新年。如果想要格里高利历转换之前并且处于 1 月 1 日和 3 月 24 日之间的日期,则可以进行手动调整。

WEEK_OF_YEAR 字段所计算的值的范围从 1 到 53。一年的第一个星期始于 getFirstDayOfWeek() 的最早 7 天,至少包含该年的 getMinimalDaysInFirstWeek() 各天。这取决于 getMinimalDaysInFirstWeek()getFirstDayOfWeek() 的值以及 1 月 1 日是星期几。一年的第一个星期和下一年的第一个星期之间的各个星期按顺序从 2 到 52 或 53(根据需要)进行编号。

例如,1998 年 1 月 1 日是星期四。如果 getFirstDayOfWeek()MONDAY,并且 getMinimalDaysInFirstWeek() 为 4(这些值反映了 ISO 8601 和很多国家/地区标准),则 1998 年的第一个星期开始于 1997 年 12 月 29 日,结束于 1998 年 1 月 4 日。但是,如果 getFirstDayOfWeek()SUNDAY,那么 1998 年的第一个星期开始于 1998 年 1 月 4 日,结束于 1998 年 1 月 10 日;1998 年头三天是 1997 年第 53 个星期的一部分。

WEEK_OF_MONTH 字段所计算的值的范围从 0 到 6。一个月的第一个星期(WEEK_OF_MONTH = 1 的日期)是该月至少连续 getMinimalDaysInFirstWeek() 天中的最早日期,结束于 getFirstDayOfWeek() 的前一天。与一年的第一个星期不同,一个月的第一个星期可能短于 7 天,也不必从 getFirstDayOfWeek() 这一天开始,并且不包括前一个月的日期。在第一个星期之前该月日期的 WEEK_OF_MONTH 为 0。

例如,如果 getFirstDayOfWeek()SUNDAYgetMinimalDaysInFirstWeek() 为 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。


simple Demo

  1. import java.util.*;
  2. public class GregorianCalendarTest
  3. {
  4.     public static void main(String[] args) {
  5.         //构造当前日期的日期对象
  6.         GregorianCalendar date = new GregorianCalendar();
  7.         //获得当前日期的日
  8.         int today = date.get(Calendar.DAY_OF_MONTH);
  9.         //获得当前日期的月份
  10.         int month = date.get(Calendar.MONTH);
  11.         //更改当前日期的日为当月的第一天
  12.         date.set(Calendar.DAY_OF_MONTH, 1);
  13.                 //获得当前为星期几(1-星期天)
  14.         int weekDay = date.get(Calendar.DAY_OF_WEEK);
  15.                 //打印日历头
  16.         System.out.println("Sun Mon Tue Wed Thu Fri Sat");
  17.         
  18.         for (int i = Calendar.SUNDAY; i < weekDay; i++)
  19.         {
  20.             System.out.print("    ");
  21.         }
  22.                 //循环打印每天
  23.         do
  24.         {
  25.             //获得当前号
  26.             int day = date.get(Calendar.DAY_OF_MONTH);
  27.             System.out.printf("%3d", day);
  28.                         //是否当天的号
  29.             if (day == today)
  30.             {
  31.                 System.out.print("*");
  32.             }else {
  33.                 System.out.print(" ");
  34.             }
  35.                         //星期六换行
  36.             if (weekDay == Calendar.SATURDAY)
  37.             {
  38.                 System.out.println();
  39.             }
  40.                         //下一天
  41.             date.add(Calendar.DAY_OF_MONTH, 1);
  42.             //下一天为星期几
  43.             weekDay = date.get(Calendar.DAY_OF_WEEK);
  44.         }
  45.         while (date.get(Calendar.MONTH) == month);
  46.                 //最后的换行
  47.         if (weekDay != Calendar.SUNDAY)
  48.         {
  49.             System.out.println();
  50.         }
  51.     }
  52. }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值