Module java.base
Package java.util

Class GregorianCalendar

java.lang.Object
java.util.Calendar
java.util.GregorianCalendar
所有已实现的接口:
Serializable, Cloneable, Comparable<Calendar>

public class GregorianCalendar extends Calendar
GregorianCalendarCalendar 的一个具体子类,提供了大部分世界上使用的标准日历系统。

GregorianCalendar 是一个混合日历,支持朱利安历和格里高利历两种日历系统,通过一个单一的不连续性来支持,默认情况下对应于格里高利历开始使用的日期(在一些国家是1582年10月15日,在其他国家是稍晚)。调用者可以通过调用 setGregorianChange() 来更改切换日期。

在历史上,那些最先采用格里高利历的国家,1582年10月4日(朱利安历)之后是1582年10月15日(格里高利历)。这个日历正确地模拟了这一点。在格里高利历切换之前,GregorianCalendar 实现了朱利安历。格里高利历和朱利安历之间唯一的区别是闰年规则。朱利安历规定每四年是闰年,而格里高利历则省略了不能被400整除的世纪年份。

GregorianCalendar 实现了推测的格里高利和朱利安历。也就是说,日期是通过无限远地向前和向后推断当前规则计算的。因此,GregorianCalendar 可以用于所有年份生成有意义和一致的结果。然而,使用 GregorianCalendar 获得的日期只有从公元4年3月1日开始才是历史准确的,那时采用了现代朱利安历规则。在此日期之前,闰年规则不规律,甚至在公元前45年之前,朱利安历甚至不存在。

在格里高利历开始使用之前,新年的第一天是3月25日。为了避免混淆,这个日历总是使用1月1日。如果需要,可以对在格里高利历切换之前且落在1月1日至3月24日之间的日期进行手动调整。

年周和周年

计算出的 WEEK_OF_YEAR 字段的值范围从1到53。一个日历年的第一周是从包含来自该年至少 getMinimalDaysInFirstWeek() 天的 getFirstDayOfWeek() 开始的最早的七天期间。因此,它取决于 getMinimalDaysInFirstWeek()getFirstDayOfWeek() 的值,以及1月1日的星期几。从一个年份的第一周到下一年的第一周(不包括)的周数从2到52或53按顺序编号(除了涉及朱利安-格里高利转换的年份)。

在构造 GregorianCalendar 时,getFirstDayOfWeek()getMinimalDaysInFirstWeek() 的值是使用与地区相关的资源进行初始化的。当 getFirstDayOfWeek()MONDAYgetMinimalDaysInFirstWeek() 是4时,周确定与 ISO 8601 标准兼容,这些值在偏好使用标准的地区中使用。这些值可以通过调用 setFirstDayOfWeek()setMinimalDaysInFirstWeek() 明确设置。

周年WEEK_OF_YEAR 周期同步。第一周和最后一周(包括)之间的所有周具有相同的 周年 值。因此,一个周年的第一天和最后一天可能具有不同的日历年值。

例如,1998年1月1日是星期四。如果 getFirstDayOfWeek()MONDAYgetMinimalDaysInFirstWeek() 是4(符合 ISO 8601 标准的设置),那么1998年的第1周从1997年12月29日开始,到1998年1月4日结束。对于1997年的最后三天,周年是1998年。然而,如果 getFirstDayOfWeek()SUNDAY,那么1998年的第1周从1998年1月4日开始,到1998年1月10日结束;1998年的前三天则属于1997年的第53周,它们的周年是1997年。

月周

计算出的 WEEK_OF_MONTH 字段的值范围从0到6。一个月的第1周(具有 WEEK_OF_MONTH = 1 的天)是该月中最早的至少包含 getMinimalDaysInFirstWeek() 天的连续天数,以 getFirstDayOfWeek() 的前一天结束。与一年的第1周不同,一个月的第1周可能少于7天,不需要从 getFirstDayOfWeek() 开始,并且不会包括上个月的天数。在第1周之前的一个月的天数具有 WEEK_OF_MONTH 为0。

例如,如果 getFirstDayOfWeek()SUNDAYgetMinimalDaysInFirstWeek() 是4,那么1998年1月的第1周是1998年1月4日(星期日)至1998年1月10日(星期六)。这些天的 WEEK_OF_MONTH 为1。1998年1月1日至1998年1月3日的 WEEK_OF_MONTH 为0。如果将 getMinimalDaysInFirstWeek() 更改为3,则1998年1月1日至1998年1月3日的 WEEK_OF_MONTH 为1。

默认字段值

clear 方法将日历字段设置为未定义。如果字段的值未定义,GregorianCalendar 将使用以下默认值。

GregorianCalendar 默认字段值
字段 默认值
ERA AD
YEAR 1970
MONTH JANUARY
DAY_OF_MONTH 1
DAY_OF_WEEK 星期的第一天
WEEK_OF_MONTH 0
DAY_OF_WEEK_IN_MONTH 1
AM_PM AM
HOUR, HOUR_OF_DAY, MINUTE, SECOND, MILLISECOND 0

未列出的字段不适用默认值。

示例:

 // get the supported ids for GMT-08:00 (Pacific Standard Time)
 String[] ids = TimeZone.getAvailableIDs(-8 * 60 * 60 * 1000);
 // if no ids were returned, something is wrong. get out.
 if (ids.length == 0)
     System.exit(0);

  // begin output
 System.out.println("Current Time");

 // create a Pacific Standard Time time zone
 SimpleTimeZone pdt = new SimpleTimeZone(-8 * 60 * 60 * 1000, ids[0]);

 // set up rules for Daylight Saving Time
 pdt.setStartRule(Calendar.APRIL, 1, Calendar.SUNDAY, 2 * 60 * 60 * 1000);
 pdt.setEndRule(Calendar.OCTOBER, -1, Calendar.SUNDAY, 2 * 60 * 60 * 1000);

 // create a GregorianCalendar with the Pacific Daylight time zone
 // and the current date and time
 Calendar calendar = new GregorianCalendar(pdt);
 Date trialTime = new Date();
 calendar.setTime(trialTime);

 // print out a bunch of interesting things
 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
 
自 JDK 1.1 起:
1.1
参见:
  • Field Details

    • BC

      public static final int BC
      ERA字段的值,指示公元前(在基督之前)的时期,也称为BCE。从BCAD的过渡年份序列为...,2 BC,1 BC,1 AD,2 AD,...
      参见:
  • Constructor Details

    • GregorianCalendar

      public GregorianCalendar()
      构造一个默认的GregorianCalendar,使用默认时区中的当前时间和默认的FORMAT区域设置。
    • GregorianCalendar

      public GregorianCalendar(TimeZone zone)
      基于给定时区中的当前时间构造一个GregorianCalendar,使用默认的FORMAT区域设置。
      参数:
      zone - 给定的时区。
      抛出:
      NullPointerException - 如果zonenull
    • GregorianCalendar

      public GregorianCalendar(Locale aLocale)
      基于默认时区中的当前时间构造一个GregorianCalendar,使用给定的区域设置。
      参数:
      aLocale - 给定的区域设置。
      抛出:
      NullPointerException - 如果aLocalenull
    • GregorianCalendar

      public GregorianCalendar(TimeZone zone, Locale aLocale)
      基于给定时区中的当前时间构造一个GregorianCalendar,使用给定的区域设置。
      参数:
      zone - 给定的时区。
      aLocale - 给定的区域设置。
      抛出:
      NullPointerException - 如果zoneaLocalenull
    • GregorianCalendar

      public GregorianCalendar(int year, int month, int dayOfMonth)
      将给定日期设置为默认时区中的当前时间和默认区域设置,构造一个GregorianCalendar
      参数:
      year - 用于设置日历中的YEAR字段的值。
      month - 用于设置日历中的MONTH字段的值。月份值从0开始。例如,1月为0。
      dayOfMonth - 用于设置日历中的DAY_OF_MONTH字段的值。
    • GregorianCalendar

      public GregorianCalendar(int year, int month, int dayOfMonth, int hourOfDay, int minute)
      将给定日期和时间设置为默认时区中的当前时间和默认区域设置,构造一个GregorianCalendar
      参数:
      year - 用于设置日历中的YEAR字段的值。
      month - 用于设置日历中的MONTH字段的值。月份值从0开始。例如,1月为0。
      dayOfMonth - 用于设置日历中的DAY_OF_MONTH字段的值。
      hourOfDay - 用于设置日历中的HOUR_OF_DAY字段的值。
      minute - 用于设置日历中的MINUTE字段的值。
    • GregorianCalendar

      public GregorianCalendar(int year, int month, int dayOfMonth, int hourOfDay, int minute, int second)
      将给定日期和时间设置为默认时区中的当前时间和默认区域设置,构造一个GregorianCalendar。
      参数:
      year - 用于设置日历中的YEAR字段的值。
      month - 用于设置日历中的MONTH字段的值。月份值从0开始。例如,1月为0。
      dayOfMonth - 用于设置日历中的DAY_OF_MONTH字段的值。
      hourOfDay - 用于设置日历中的HOUR_OF_DAY字段的值。
      minute - 用于设置日历中的MINUTE字段的值。
      second - 用于设置日历中的SECOND字段的值。
  • Method Details

    • setGregorianChange

      public void setGregorianChange(Date date)
      设置GregorianCalendar更改日期。这是从儒略日期切换到公历日期发生的时间点。默认为1582年10月15日(公历)。在此之前,日期将采用儒略历。

      要获得纯粹的儒略历,将更改日期设置为Date(Long.MAX_VALUE)。要获得纯粹的公历,将更改日期设置为Date(Long.MIN_VALUE)

      参数:
      date - 给定的公历切换日期。
    • getGregorianChange

      public final Date getGregorianChange()
      获取格里高利历更改日期。这是从儒略日期切换到公历日期发生的时间点。默认为1582年10月15日(公历)。在此之前,日期将采用儒略历。
      返回:
      GregorianCalendar对象的格里高利历切换日期。
    • isLeapYear

      public boolean isLeapYear(int year)
      确定给定年份是否为闰年。如果给定年份是闰年,则返回true。要指定公元前年份,必须给出1 - 年数。例如,公元前4年指定为-3。
      参数:
      year - 给定的年份。
      返回:
      如果给定年份是闰年,则返回true;否则返回false
    • getCalendarType

      public String getCalendarType()
      返回日历类型为"gregory"
      覆盖:
      getCalendarType 在类 Calendar
      返回:
      "gregory"
      自版本:
      1.8
      参见:
    • equals

      public boolean equals(Object obj)
      将此GregorianCalendar与指定的Object进行比较。如果参数是代表相同时间值(从Epoch的毫秒偏移量)在相同的Calendar参数和Gregorian更改日期下的GregorianCalendar对象,则结果为true
      覆盖:
      equals 在类 Calendar
      参数:
      obj - 要比较的对象。
      返回:
      如果此对象等于obj,则返回true;否则返回false
      参见:
    • hashCode

      public int hashCode()
      为此GregorianCalendar对象生成哈希码。
      覆盖:
      hashCode 在类 Calendar
      返回:
      此对象的哈希码值。
      参见:
    • add

      public void add(int field, int amount)
      根据日历的规则,向给定的日历字段添加指定的(有符号)时间量。

      添加规则1。调用后field的值减去调用前field的值为amount,取模任何在field中发生的溢出。当字段值超出其范围并且因此下一个较大字段被递增或递减并且字段值被调整回其范围时,会发生溢出。

      添加规则2。如果预期较小字段是不变的,但由于在更改field后其最小值或最大值发生变化而不可能等于其先前值,则将其值调整为尽可能接近其预期值。较小字段表示较小的时间单位。HOUR是比DAY_OF_MONTH更小的字段。对于不预期是不变的较小字段,不会进行调整。日历系统确定哪些字段预计是不变的。

      由以下指定:
      add 在类 Calendar
      参数:
      field - 日历字段。
      amount - 要添加到字段的日期或时间量。
      抛出:
      IllegalArgumentException - 如果fieldZONE_OFFSETDST_OFFSET或未知,或者在非宽松模式下任何日历字段具有超出范围的值。
      参见:
    • roll

      public void roll(int field, boolean up)
      在不更改较大字段的情况下添加或减去给定时间字段上的单个时间单位。

      示例:考虑一个最初设置为1999年12月31日的GregorianCalendar。调用roll(Calendar.MONTH, true)将日历设置为1999年1月31日。YEAR字段保持不变,因为它是比MONTH更大的字段。

      由以下指定:
      roll 在类 Calendar
      参数:
      field - 时间字段。
      up - 指示是否将指定日历字段的值向上滚动或向下滚动。如果向上滚动,则使用true,否则使用false
      抛出:
      IllegalArgumentException - 如果fieldZONE_OFFSETDST_OFFSET或未知,或者在非宽松模式下任何日历字段具有超出范围的值。
      参见:
    • roll

      public void roll(int field, int amount)
      在不更改较大字段的情况下向指定的日历字段添加有符号量。负滚动量表示从字段中减去而不更改较大字段。如果指定的量为0,则此方法不执行任何操作。

      此方法在添加数量之前调用Calendar.complete(),以便所有日历字段都被规范化。如果在非宽松模式下存在任何具有超出范围值的日历字段,则会抛出IllegalArgumentException

      示例:考虑一个最初设置为1999年8月31日的GregorianCalendar。调用roll(Calendar.MONTH, 8)将日历设置为1999年4月30日。1999年。使用GregorianCalendar,在4月份DAY_OF_MONTH字段不能为31。DAY_OF_MONTH设置为最接近的可能值,即30。YEAR字段保持1999年的值,因为它是比MONTH更大的字段。

      示例:考虑一个最初设置为1999年6月6日星期日的GregorianCalendar。调用roll(Calendar.WEEK_OF_MONTH, -1)将日历设置为1999年6月1日星期二,而调用add(Calendar.WEEK_OF_MONTH, -1)将日历设置为1999年5月30日星期日。这是因为滚动规则施加了额外的约束:当WEEK_OF_MONTH被滚动时,MONTH不得更改。结合添加规则1,结果日期必须在6月1日星期二和6月5日星期六之间。根据添加规则2,当更改WEEK_OF_MONTH时,不变的DAY_OF_WEEK设置为星期二,最接近星期日的可能值(星期日是一周的第一天)。

      覆盖:
      roll 在类 Calendar
      参数:
      field - 日历字段。
      amount - 要添加到field的有符号量。
      抛出:
      IllegalArgumentException - 如果fieldZONE_OFFSETDST_OFFSET或未知,或者在非宽松模式下任何日历字段具有超出范围的值。
      自版本:
      1.2
      参见:
    • getMinimum

      public int getMinimum(int field)
      返回此GregorianCalendar实例给定日历字段的最小值。最小值定义为考虑到当前值的getFirstDayOfWeekgetMinimalDaysInFirstWeekgetGregorianChangegetTimeZone方法的最小值。
      由以下指定:
      getMinimum 在类 Calendar
      参数:
      field - 日历字段。
      返回:
      给定日历字段的最小值。
      参见:
    • getMaximum

      public int getMaximum(int field)
      返回此GregorianCalendar实例给定日历字段的最大值。最大值定义为考虑到当前值的getFirstDayOfWeekgetMinimalDaysInFirstWeekgetGregorianChangegetTimeZone方法的最大值。
      指定者:
      getMaximum 在类 Calendar
      参数:
      field - 日历字段。
      返回值:
      给定日历字段的最大值。
      参见:
    • getGreatestMinimum

      public int getGreatestMinimum(int field)
      返回此GregorianCalendar实例的给定日历字段的最高最小值。最高最小值被定义为getActualMinimum(int)对于任何可能的时间值返回的最大值,考虑到getFirstDayOfWeekgetMinimalDaysInFirstWeekgetGregorianChangegetTimeZone方法的当前值。
      指定者:
      getGreatestMinimum 在类 Calendar
      参数:
      field - 日历字段。
      返回值:
      给定日历字段的最高最小值。
      参见:
    • getLeastMaximum

      public int getLeastMaximum(int field)
      返回此GregorianCalendar实例的给定日历字段的最低最大值。最低最大值被定义为getActualMaximum(int)对于任何可能的时间值返回的最小值,考虑到getFirstDayOfWeekgetMinimalDaysInFirstWeekgetGregorianChangegetTimeZone方法的当前值。
      指定者:
      getLeastMaximum 在类 Calendar
      参数:
      field - 日历字段
      返回值:
      给定日历字段的最低最大值。
      参见:
    • getActualMinimum

      public int getActualMinimum(int field)
      返回此日历字段可能具有的最小值,考虑到给定的时间值和getFirstDayOfWeekgetMinimalDaysInFirstWeekgetGregorianChangegetTimeZone方法的当前值。

      例如,如果格里高利改革日期是1970年1月10日,而此GregorianCalendar的日期是1970年1月20日,则DAY_OF_MONTH字段的实际最小值为10,因为1970年1月10日的前一个日期是1969年12月27日(在儒略历中)。因此,1969年12月28日至1970年1月9日不存在。

      覆盖:
      getActualMinimum 在类 Calendar
      参数:
      field - 日历字段
      返回值:
      GregorianCalendar的时间值的给定字段的最小值
      自:
      1.2
      参见:
    • getActualMaximum

      public int getActualMaximum(int field)
      返回此日历字段可能具有的最大值,考虑到给定的时间值和getFirstDayOfWeekgetMinimalDaysInFirstWeekgetGregorianChangegetTimeZone方法的当前值。例如,如果此实例的日期是2004年2月1日,则DAY_OF_MONTH字段的实际最大值为29,因为2004年是闰年;如果此实例的日期是2005年2月1日,则为28。

      此方法基于YEAR(日历年)值计算WEEK_OF_YEAR的最大值,而不是week year。调用getWeeksInWeekYear()以获取此GregorianCalendar的周年中WEEK_OF_YEAR的最大值。

      覆盖:
      getActualMaximum 在类 Calendar
      参数:
      field - 日历字段
      返回值:
      GregorianCalendar的时间值的给定字段的最大值
      自:
      1.2
      参见:
    • isWeekDateSupported

      public final boolean isWeekDateSupported()
      返回true,表示此GregorianCalendar支持周日期。
      覆盖:
      isWeekDateSupported 在类 Calendar
      返回值:
      true(始终)
      自:
      1.7
      参见:
    • getWeekYear

      public int getWeekYear()
      返回此GregorianCalendar表示的week year。在周年的1到最大周数之间的周中,具有相同周年值,可能比YEAR(日历年)值提前或推迟一年。

      此方法在计算周年之前调用Calendar.complete()

      覆盖:
      getWeekYear 在类 Calendar
      返回值:
      GregorianCalendar表示的周年。如果ERA值为BC,则年份由0或负数表示:BC 1为0,BC 2为-1,BC 3为-2,依此类推。
      抛出:
      IllegalArgumentException - 如果任何日历字段在非宽松模式下无效。
      自:
      1.7
      参见:
    • setWeekDate

      public void setWeekDate(int weekYear, int weekOfYear, int dayOfWeek)
      将此GregorianCalendar设置为由日期标识符给出的日期 - weekYearweekOfYeardayOfWeekweekOfYear遵循WEEK_OF_YEAR编号。 dayOfWeek值必须是DAY_OF_WEEK值之一:SUNDAYSATURDAY

      请注意,数字表示的星期几与ISO 8601标准不同,当getFirstDayOfWeek()MONDAYgetMinimalDaysInFirstWeek()为4时,weekOfYear编号与标准兼容。

      set方法不同,所有日历字段和时间值在返回时都会计算。

      如果weekOfYear超出了weekYear的有效周范围,则在宽松模式下调整weekYearweekOfYear值,或在非宽松模式下抛出IllegalArgumentException

      覆盖:
      setWeekDate 在类 Calendar
      参数:
      weekYear - 周年
      weekOfYear - 基于weekYear的周数
      dayOfWeek - 星期几的值:为DAY_OF_WEEK字段的常量之一:SUNDAY,...,SATURDAY
      抛出:
      IllegalArgumentException - 如果给定的日期标识符中有任何无效项,或者如果任何日历字段与非宽松模式下给定的日期标识符不一致
      自:
      1.7
      参见:
    • getWeeksInWeekYear

      public int getWeeksInWeekYear()
      返回此GregorianCalendar表示的周年中的周数。

      例如,如果此GregorianCalendar的日期为2008年12月31日,具有ISO 8601兼容设置,则此方法将返回53,表示时间段:2008年12月29日至2010年1月3日,而getActualMaximum(WEEK_OF_YEAR)将返回52,表示时间段:2007年12月31日至2008年12月28日。

      覆盖:
      getWeeksInWeekYear 在类 Calendar
      返回:
      周年中的周数。
      自:
      1.7
      参见:
    • computeFields

      protected void computeFields()
      将时间值(从Epoch的毫秒偏移量)转换为日历字段值。时间不会首先重新计算;要重新计算时间,然后字段,请调用complete方法。
      指定者:
      computeFields 在类 Calendar
      参见:
    • computeTime

      protected void computeTime()
      将日历字段值转换为时间值(从Epoch的毫秒偏移量)。
      指定者:
      computeTime 在类 Calendar
      抛出:
      IllegalArgumentException - 如果任何日历字段无效。
      参见:
    • toZonedDateTime

      public ZonedDateTime toZonedDateTime()
      将此对象转换为表示与此GregorianCalendar相同时间线上的ZonedDateTime

      由于此对象支持儒略-格里高历切换日期而ZonedDateTime不支持,因此结果的年、月和日可能具有不同的值。结果将表示ISO日历系统中的正确日期,这也将是修正儒略日的相同值。

      返回:
      表示与此儒略历日历相同时间线上的分区日期时间
      自:
      1.8
    • from

      public static GregorianCalendar from(ZonedDateTime zdt)
      ZonedDateTime对象获取具有默认区域设置的GregorianCalendar实例。

      由于ZonedDateTime不支持儒略-格里高历切换日期并使用ISO日历系统,因此返回的GregorianCalendar是纯儒略历日历,并使用ISO 8601标准进行周定义,其中MONDAY作为FirstDayOfWeek4作为MinimalDaysInFirstWeek的值。

      ZoneDateTime可以存储比GregorianCalendar更远的未来和过去的时间线上的点。在这种情况下,此方法将抛出IllegalArgumentException异常。

      参数:
      zdt - 要转换的分区日期时间对象
      返回:
      表示与提供的分区日期时间相同时间线上的儒略历日历
      抛出:
      NullPointerException - 如果zdt为null
      IllegalArgumentException - 如果分区日期时间过大,无法表示为GregorianCalendar
      自:
      1.8