calendar.html

来自「j2se5-api-zh,java文档的中文版本」· HTML 代码 · 共 1,200 行 · 第 1/5 页

HTML
1,200
字号
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><!--NewPage--><HTML><HEAD><!-- Generated by javadoc (build 1.5.0_03) on Wed Nov 02 09:50:38 CST 2005 --><META http-equiv="Content-Type" content="text/html; charset=gb2312"><TITLE>Calendar (Java 2 Platform SE 5.0)</TITLE><META NAME="keywords" CONTENT="java.util.Calendar class"><LINK REL ="stylesheet" TYPE="text/css" HREF="../../stylesheet.css" TITLE="Style"><SCRIPT type="text/javascript">function windowTitle(){    parent.document.title="Calendar (Java 2 Platform SE 5.0)";}</SCRIPT><NOSCRIPT></NOSCRIPT></HEAD><BODY BGCOLOR="white" onload="windowTitle();"><!-- ========= START OF TOP NAVBAR ======= --><A NAME="navbar_top"><!-- --></A><A HREF="#skip-navbar_top" title="跳过导航链接"></A><TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY=""><TR><TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1"><A NAME="navbar_top_firstrow"><!-- --></A><TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">  <TR ALIGN="center" VALIGN="top">  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>概述</B></FONT></A>&nbsp;</TD>  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>软件包</B></FONT></A>&nbsp;</TD>  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>类</B></FONT>&nbsp;</TD>  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Calendar.html"><FONT CLASS="NavBarFont1"><B>使用</B></FONT></A>&nbsp;</TD>  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>树</B></FONT></A>&nbsp;</TD>  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>已过时</B></FONT></A>&nbsp;</TD>  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>索引</B></FONT></A>&nbsp;</TD>  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../help-doc.html"><FONT CLASS="NavBarFont1"><B>帮助</B></FONT></A>&nbsp;</TD>  </TR></TABLE></TD><TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM><b>Java<sup><font size=-2>TM</font></sup>&nbsp;2&nbsp;Platform<br>Standard&nbsp;Ed. 5.0</b></EM></TD></TR><TR><TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">&nbsp;<A HREF="BitSet.html" title="java.util 中的类"><B>上一个类</B></A>&nbsp;&nbsp;<A HREF="Collection.html" title="java.util 中的接口"><B>下一个类</B></A></FONT></TD><TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">  <A HREF="../../index.html@java_2Futil_2FCalendar.html" target="_top"><B>框架</B></A>  &nbsp;&nbsp;<A HREF="Calendar.html" target="_top"><B>无框架</B></A>  &nbsp;&nbsp;<SCRIPT type="text/javascript">  <!--  if(window==top) {    document.writeln('<A HREF="../../allclasses-noframe.html"><B>所有类</B></A>');  }  //--></SCRIPT><NOSCRIPT>  <A HREF="../../allclasses-noframe.html"><B>所有类</B></A></NOSCRIPT></FONT></TD></TR><TR><TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">  摘要:&nbsp;嵌套&nbsp;|&nbsp;<A HREF="#field_summary">字段</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">构造方法</A>&nbsp;|&nbsp;<A HREF="#method_summary">方法</A></FONT></TD><TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">详细信息:&nbsp;<A HREF="#field_detail">字段</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">构造方法</A>&nbsp;|&nbsp;<A HREF="#method_detail">方法</A></FONT></TD></TR></TABLE><A NAME="skip-navbar_top"></A><!-- ========= END OF TOP NAVBAR ========= --><HR><!-- ======== START OF CLASS DATA ======== --><H2><FONT SIZE="-1">java.util</FONT><BR>类 Calendar</H2><PRE><A HREF="../lang/Object.html" title="java.lang 中的类">java.lang.Object</A>  <IMG SRC="../../resources/inherit.gif" ALT="继承者 "><B>java.util.Calendar</B></PRE><DL><DT><B>所有已实现的接口:</B> <DD>java.io.Serializable, <A HREF="../lang/Cloneable.html" title="java.lang 中的接口">Cloneable</A>, <A HREF="../lang/Comparable.html" title="java.lang 中的接口">Comparable</A>&lt;<A HREF="Calendar.html" title="java.util 中的类">Calendar</A>&gt;</DD></DL><DL><DT><B>直接已知子类:</B> <DD><A HREF="GregorianCalendar.html" title="java.util 中的类">GregorianCalendar</A></DD></DL><HR><DL><DT><PRE>public abstract class <B>Calendar</B><DT>extends <A HREF="../lang/Object.html" title="java.lang 中的类">Object</A><DT>implements java.io.Serializable, <A HREF="../lang/Cloneable.html" title="java.lang 中的接口">Cloneable</A>, <A HREF="../lang/Comparable.html" title="java.lang 中的接口">Comparable</A>&lt;<A HREF="Calendar.html" title="java.util 中的类">Calendar</A>&gt;</DL></PRE><P><code>Calendar</code> 类是一个抽象类,它为特定瞬间与一组诸如 <code>YEAR</code>、<code>MONTH</code>、<code>DAY_OF_MONTH</code>、<code>HOUR</code> 等 <A HREF="Calendar.html#fields"><CODE>日历字段</CODE></A>之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。瞬间可用毫秒值来表示,它是距<a name="Epoch"><em>历元</em></a>(即格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000,格里高利历)的偏移量。<p>该类还为实现包范围外的具体日历系统提供了其他字段和方法。这些字段和方法被定义为 <code>protected</code>。 <p>与其他语言环境敏感类一样,<code>Calendar</code> 提供了一个类方法 <code>getInstance</code>,以获得此类型的一个通用的对象。<code>Calendar</code> 的 <code>getInstance</code> 方法返回一个 <code>Calendar</code> 对象,其日历字段已由当前日期和时间初始化: <blockquote> <pre>     Calendar rightNow = Calendar.getInstance(); </pre> </blockquote><p><code>Calendar</code> 对象能够生成为特定语言和日历风格实现日期-时间格式化所需的所有日历字段值,例如,日语-格里高里历,日语-传统日历。<code>Calendar</code> 定义了某些日历字段返回值的范围,以及这些值的含义。例如,对于所有日历,日历系统第一个月的值是 <code>MONTH == JANUARY</code>。其他值是由具体子类(例如 <code>ERA</code>)定义的。有关此内容的细节,请参阅每个字段的文档和子类文档。<h4>获得并设置日历字段值</h4><p>可以通过调用 <code>set</code> 方法来设置日历字段值。在需要计算时间值(距历元所经过的毫秒)或日历字段值之前,不会解释 <code>Calendar</code> 中的所有字段值设置。调用 <code>get</code>、<code>getTimeInMillis</code>、<code>getTime</code>、<code>add</code> 和 <code>roll</code> 涉及此类计算。<h4>宽松性</h4><p><code>Calendar</code> 有两种解释日历字段的模式,即 <em>lenient</em> 和 <em>non-lenient</em>。当 <code>Calendar</code> 处于 lenient 模式时,它可接受比它所生成的日历字段范围更大范围内的值。当 <code>Calendar</code> 重新计算日历字段值,以便由 <code>get()</code> 返回这些值时,所有日历字段都被标准化。例如,lenient 模式下的 <code>GregorianCalendar</code> 将 <code>MONTH == JANUARY</code>、<code>DAY_OF_MONTH == 32</code> 解释为 February 1。<p>当 <code>Calendar</code> 处于 non-lenient 模式时,如果其日历字段中存在任何不一致性,它都会抛出一个异常。例如,<code>GregorianCalendar</code> 总是在 1 与月份的长度之间生成 <code>DAY_OF_MONTH</code> 值。如果已经设置了任何超出范围的字段值,那么在计算时间或日历字段值时,处于 non-lenient 模式下的 <code>GregorianCalendar</code> 会抛出一个异常。<h4>第一个星期</h4><code>Calendar</code> 使用两个参数定义了特定于语言环境的 7 天制星期:星期的第一天和第一个星期中的最小一天(从 1 到 7)。这些数字取自构造 <code>Calendar</code> 时的语言环境资源数据。还可以通过为其设置值的方法来显式地指定它们。<p>在设置或获得 <code>WEEK_OF_MONTH</code> 或 <code>WEEK_OF_YEAR</code> 字段时,<code>Calendar</code> 必须确定一个月或一年的第一个星期,以此作为参考点。一个月或一年的第一个星期被确定为开始于 <code>getFirstDayOfWeek()</code> 的最早七天,它最少包含那一个月或一年的 <code>getMinimalDaysInFirstWeek()</code> 天数。第一个星期之前的各星期编号为 ...、-1、0;之后的星期编号为 2、3、...。注意,<code>get()</code> 返回的标准化编号方式可能有所不同。例如,特定 <code>Calendar</code> 子类可能将某一年第 1 个星期之前的那个星期指定为前一年的第 <code><i>n</i></code> 个星期。<h4>日历字段解析</h4>在计算日历字段中的日期和时间时,可能没有足够的信息用于计算(例如只有年和月,但没有日),或者可能有不一致的信息( 例如 &quot;Tuesday, July 15, 1996&quot;(格林威治时间)&mdash;&mdash;实际上,1996 年 7 月 15 日是星期一 )。<code>Calendar</code> 将分析日历字段值,以便用以下方式确定日期和时间。<p>如果日历字段值中存在任何冲突,则 <code>Calendar</code> 将为最近设置的日历字段提供优先权。以下是日历字段的默认组合。将使用由最近设置的单个字段所确定的最近组合。<p><a name="date_resolution">对于日期字段</a>: <blockquote> <pre> YEAR + MONTH + DAY_OF_MONTH YEAR + MONTH + WEEK_OF_MONTH + DAY_OF_WEEK YEAR + MONTH + DAY_OF_WEEK_IN_MONTH + DAY_OF_WEEK YEAR + DAY_OF_YEAR YEAR + DAY_OF_WEEK + WEEK_OF_YEAR </pre></blockquote><a name="time_resolution">对于时间字段</a>: <blockquote> <pre> HOUR_OF_DAY AM_PM + HOUR </pre></blockquote><p>如果在选定的字段组合中,还有尚未设置值的任一日历字段,那么 <code>Calendar</code> 将使用其默认值。每个字段的默认值可能依据具体的日历系统而有所不同。例如,在 <code>GregorianCalendar</code> 中,字段的默认值与历元起始部分的字段值相同:即 <code>YEAR = 1970</code>、<code>MONTH = JANUARY</code>、<code>DAY_OF_MONTH = 1</code>,等等。 <p><strong>注:</strong> 对于某些特别时间的解释可能会有某些歧义,可以用下列方式解决: <ol><li> 23:59 是一天中的最后一分钟,而 00:00 是下一天的第一分钟。因此,1999 年 12 月 31 日的 23:59 &lt; 2000 年 1 月 1 日的 00:00。<li> 尽管从历史上看不够精确,但午夜也属于 "am",,中午属于 "pm",所以在同一天,12:00 am ( 午夜 ) &lt; 12:01 am,12:00 pm ( 中午 ) &lt; 12:01 pm。 </ol> <p>日期或时间格式字符串不是日历定义的一部分,因为在运行时,用户必须能够修改或重写它们。可以使用 <CODE>DateFormat</CODE> 格式化日期。<h4>字段操作</h4> 可以使用三种方法更改日历字段:<code>set()</code>、<code>add()</code> 和 <code>roll()</code>。</p> <p><strong><code>set(f, value)</code></strong> 将日历字段 <code>f</code> 更改为 <code>value</code>。此外,它设置了一个内部成员变量,以指示日历字段 <code>f</code> 已经被更改。尽管日历字段 <code>f</code> 是立即更改的,但是直到下次调用 <code>get()</code>、<code>getTime()</code>、<code>getTimeInMillis()</code>、<code>add()</code> 或 <code>roll()</code> 时才会重新计算日历的时间值(以毫秒为单位)。因此,多次调用 <code>set()</code> 不会触发多次不必要的计算。使用 <code>set()</code> 更改日历字段的结果是,其他日历字段也可能发生更改,这取决于日历字段、日历字段值和日历系统。此外,在重新计算日历字段之后,<code>get(f)</code> 没必要通过调用 <code>set</code> 方法返回 <code>value</code> 集合。具体细节是通过具体的日历类确定的。</p> <p><em>示例</em>:假定 <code>GregorianCalendar</code> 最初被设置为 1999 年 8 月 31 日。调用 <code>set(Calendar.MONTH, Calendar.SEPTEMBER)</code> 将该日期设置为 1999 年 9 月 31 日。如果随后调用 <code>getTime()</code>,那么这是分析 1999 年 10 月 1 日的一个暂时内部表示。但是,在调用 <code>getTime()</code> 之前调用 <code>set(Calendar.DAY_OF_MONTH, 30)</code> 会将该日期设置为 1999 年 9 月 30 日,因为在调用 <code>set()</code> 之后没有发生重新计算。</p> <p><strong><code>add(f, delta)</code></strong> 将 <code>delta</code> 添加到 <code>f</code> 字段中。这等同于调用 <code>set(f, get(f) + delta)</code>,但要带以下两个调整:</p> <blockquote><p><strong>Add 规则 1</strong>。调用后 <code>f</code> 字段的值减去调用前 <code>f</code> 字段的值等于 <code>delta</code>,以字段 <code>f</code> 中发生的任何溢出为模。溢出发生在字段值超出其范围时,结果,下一个更大的字段会递增或递减,并将字段值调整回其范围内。</p> <p><strong>Add 规则 2</strong>。如果期望某一个更小的字段是不变的,但让它等于以前的值是不可能的,因为在字段 <code>f</code> 发生更改之后,或者在出现其他约束之后,比如时区偏移量发生更改,它的最大值和最小值也在发生更改,然后它的值被调整为尽量接近于所期望的值。更小的字段表示一个更小的时间单元。<code>HOUR</code> 是一个比 <code>DAY_OF_MONTH</code> 小的字段。对于不期望是不变字段的更小字段,无需进行任何调整。日历系统会确定期望不变的那些字段。</p> </blockquote> <p>此外,与 <code>set()</code> 不同,<code>add()</code> 强迫日历系统立即重新计算日历的毫秒数和所有字段。</p> <p><em>示例</em>:假定 <code>GregorianCalendar</code> 最初被设置为 1999 年 8 月 31 日。调用 <code>add(Calendar.MONTH, 13)</code> 将日历设置为 2000 年 9 月 30 日。<strong>Add 规则 1</strong> 将 <code>MONTH</code> 字段设置为 September,因为向 August 添加 13 个月得出的就是下一年的 September。因为在 <code>GregorianCalendar</code> 中,<code>DAY_OF_MONTH</code> 不可能是 9 月 31 日,所以 <strong>add 规则 2</strong> 将 <code>DAY_OF_MONTH</code> 设置为 30,即最可能的值。尽管它是一个更小的字段,但不能根据规则 2 调整 <code>DAY_OF_WEEK</code>,因为在 <code>GregorianCalendar</code> 中的月份发生变化时,该值也需要发生变化。</p> <p><strong><code>roll(f, delta)</code></strong> 将 <code>delta</code> 添加到 <code>f</code> 字段中,但不更改更大的字段。这等同于调用 <code>add(f, delta)</code>,但要带以下调整:</p>  <blockquote><p><strong>Roll 规则</strong>。在完成调用后,更大的字段无变化。更大的字段表示一个更大的时间单元。<code>DAY_OF_MONTH</code> 是一个比 <code>HOUR</code> 大的字段。</p> </blockquote> <p><em>示例</em>:请参阅 <A HREF="GregorianCalendar.html#roll(int, int)"><CODE>GregorianCalendar.roll(int, int)</CODE></A>。 <p><strong>使用模型</strong>。为了帮助理解 <code>add()</code> 和 <code>roll()</code> 的行为,假定有一个用户界面组件,它带有用于月、日、年和基础 <code>GregorianCalendar</code> 的递增或递减按钮。如果从界面上读取的日期为 1999 年 1 月 31 日,并且用户按下月份的递增按钮,那么应该得到什么?如果基础实现使用 <code>set()</code>,那么可以将该日期读为 1999 年 3 月 3 日。更好的结果是 1999 年 2 月 28 日。此外,如果用户再次按下月份的递增按钮,那么该日期应该读为 1999 年 3 月 31 日,而不是 1999 年 3 月 28 日。通过保存原始日期并使用 <code>add()</code> 或 <code>roll()</code>,根据是否会影响更大的字段,用户界面可以像大多数用户所期望的那样运行。</p><P><P><DL><DT><B>从以下版本开始:</B></DT>  <DD>JDK1.1</DD><DT><B>另请参见:</B><DD><A HREF="../lang/System.html#currentTimeMillis()"><CODE>System.currentTimeMillis()</CODE></A>, <A HREF="Date.html" title="java.util 中的类"><CODE>Date</CODE></A>, <A HREF="GregorianCalendar.html" title="java.util 中的类"><CODE>GregorianCalendar</CODE></A>, <A HREF="TimeZone.html" title="java.util 中的类"><CODE>TimeZone</CODE></A>, <CODE>DateFormat</CODE>, <A HREF="../../serialized-form.html#java.util.Calendar">序列化表格</A></DL><HR><P><!-- =========== FIELD SUMMARY =========== --><A NAME="field_summary"><!-- --></A><TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY=""><TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor"><TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2"><B>字段摘要</B></FONT></TH></TR><TR BGCOLOR="white" CLASS="TableRowColor"><TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"><CODE>static&nbsp;int</CODE></FONT></TD><TD><CODE><B><A HREF="Calendar.html#AM">AM</A></B></CODE><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;指示从午夜到中午之前这段时间的 <A HREF="Calendar.html#AM_PM"><CODE>AM_PM</CODE></A> 字段值。</TD></TR><TR BGCOLOR="white" CLASS="TableRowColor"><TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"><CODE>static&nbsp;int</CODE></FONT></TD><TD><CODE><B><A HREF="Calendar.html#AM_PM">AM_PM</A></B></CODE><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<code>get</code> 和 <code>set</code> 的字段数字,指示 <code>HOUR</code> 是在中午之前还是在中午之后。</TD>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?