java.util,Date
Java在java.util包中提供了Date类,这个类封装了当前的日期和时间:
- 所有已经实现的接口:Serializable Cloneable Comparable<Date>
- 直接已知子类: Date Time Timestamp
public class Date
extends Object
implements Serializable , Cloneable , Comparable<Date>
类 Date
表示特定的瞬间,精确到毫秒。
在 JDK 1.1 之前,类 Date
有两个其他的函数。它允许把日期解释为年、月、日、小时、分钟和秒值。它也允许格式化和解析日期字符串。不过,这些函数的 API 不易于实现国际化。从 JDK 1.1 开始,应该使用 Calendar
类实现日期和时间字段之间转换,使用 DateFormat
类来格式化和解析日期字符串。Date
中的相应方法已废弃。
尽管 Date
类打算反映协调世界时 (UTC),但无法做到如此准确,这取决于 Java 虚拟机的主机环境。当前几乎所有操作系统都假定 1 天 = 24 × 60 × 60 = 86400 秒。但对于 UTC,大约每一两年出现一次额外的一秒,称为“闰秒”。闰秒始终作为当天的最后一秒增加,并且始终在 12 月 31 日或 6 月 30 日增加。例如,1995 年的最后一分钟是 61 秒,因为增加了闰秒。大多数计算机时钟不是特别的准确,因此不能反映闰秒的差别。
一些计算机标准是按照格林威治标准时 (GMT) 定义的,格林威治标准时和世界时 (UT) 是相等的。GMT 是标准的“民间”名称;UT 是相同标准的“科学”名称。UTC 和 UT 的区别是:UTC 是基于原子时钟的,UT 是基于天体观察的,两者在实际应用中难分轩轾。因为地球的旋转不是均匀的(它以复杂的方式减速和加速),所以 UT 始终不是均匀地流过。闰秒是根据需要引入 UTC 的,以便把 UTC 保持在 UT1 的 0.9 秒之内,UT1 是应用了某些更正的 UT 版本。还有其他的时间和日期系统;例如,基于卫星的全球定位系统 (GPS) 使用的时间刻度与 UTC 同步,但没有 针对闰秒进行调整。有关更多信息的一个有趣来源是美国海军天文台,特别是 Directorate of Time 的网址: http://tycho.usno.navy.mil ; 还有它们对 "Systems of Time" 的定义,网址为:http://tycho.usno.navy.mil/systime.html
在类 Date
所有可以接受或返回年、月、日期、小时、分钟和秒值的方法中,将使用下面的表示形式:
- 年份 y 由整数 y
- 1900
表示。 - 月份由从 0 至 11 的整数表示;0 是一月、1 是二月等等;因此 11 是十二月。
- 日期(一月中的某天)按通常方式由整数 1 至 31 表示。
- 小时由从 0 至 23 的整数表示。因此,从午夜到 1 a.m. 的时间是 0 点,从中午到 1 p.m. 的时间是 12 点。
- 分钟按通常方式由 0 至 59 的整数表示。
- 秒由 0 至 61 的整数表示;值 60 和 61 只对闰秒发生,尽管那样,也只用在实际正确跟踪闰秒的 Java 实现中。于按当前引入闰秒的方式,两个闰秒在同一分钟内发生是极不可能的,但此规范遵循 ISO C 的日期和时间约定。
在所有情形中,针对这些目的赋予方法的参数不需要在指定的范围内;例如,可以把日期指定为 1 月 32 日,并把它解释为 2 月 1 日的相同含义。
另请参见:DateFormat
, Calendar
, TimeZone
, 序列化表格
Date类的构造方法摘要:
方 法 | 说 明 |
Date() |
分配 |
Date(long date) |
分配 |
方法摘要:一旦有一个可用的日期对象,可以调用以下任何一种支持的方法使用时间:
方 法 | 描 述 |
---|---|
boolean after(Date date) | 如果调用Date对象包含或晚于指定的日期则返回true,否则,返回false。 |
boolean before(Date date) | 如果调用Date对象包含或早于日期指定的日期返回true,否则,返回false。 |
Object clone( ) | 重复调用Date对象。 |
int compareTo(Date date) | 调用对象的值与日期比较。如果这两个值相等返回0。如果调用对象是早于日期返回一个负值。如果调用对象迟于日期返回正值。 |
int compareTo(Object obj) | 以相同的compareTo(Date)操作 如果obj是一个类日期。否则,它会抛出一个ClassCastException。 |
boolean equals(Object date) | 如果调用Date对象包含相同的时间及日期指定日期则返回true,否则,返回false。 |
long getTime( ) | 返回自1970年1月1日起已经过的毫秒数。 |
int hashCode( ) | 返回调用对象的哈希代码。 |
void setTime(long time) | 设置所指定的时间,这表示从1970年1月1日从午夜的时间和日期以毫秒为单位经过的时间。 |
String toString( ) | 调用Date对象转换为字符串,并返回结果。 |
从类 java.lang.Object 继承的方法 |
---|
finalize, getClass, notify, notifyAll, wait, wait, wait |
构造方法详细信息
Date
public Date()
分配 Date
对象并初始化此对象,以表示分配它的时间(精确到毫秒)。
Date
public Date(long date)
分配 Date
对象并初始化此对象,以表示自从标准基准时间(称为“历元(epoch)”,即 1970 年 1 月 1 日 00:00:00 GMT)以来的指定毫秒数。
参数:date
- 自 1970 年 1 月 1 日 00:00:00 GMT 以来的毫秒数。
另请参见:System.currentTimeMillis()
方法详细信息
clone
public Object clone() 返回此对象的副本。
返回:此实例的一个副本。
另请参见:Cloneable
getTime
public long getTime() 返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
返回: 自 1970 年 1 月 1 日 00:00:00 GMT 以来此日期表示的毫秒数。
setTime
public void setTime(long time) 设置此 Date 对象,以表示 1970 年 1 月 1 日 00:00:00 GMT 以后 time 毫秒的时间点。
参数:time
- 毫秒数。
before
public boolean before(Date when) 测试此日期是否在指定日期之前。
参数:when
- 日期。
返回:当且仅当此 Date 对象表示的瞬间比 when 表示的瞬间早,才返回 true
;否则返回 false
。
抛出:NullPointerException
- 如果 when
为 null。
after
public boolean after(Date when) 测试此日期是否在指定日期之后。
参数:when
- 日期。
返回:当且仅当此 Date 对象表示的瞬间比 when 表示的瞬间晚,才返回 true
;否则返回 false
。
抛出:NullPointerException
- 如果 when
为 null。
equals
public boolean equals(Object obj)
比较两个日期的相等性。当且仅当参数不为 null
,并且是一个表示与此对象相同的时间点(到毫秒)的 Date
对象时,结果才为 true
。因此,当且仅当 getTime
方法对于两个 Date
对象返回相同的 long
值时,这两个对象才是相等的。
参数:obj
- 要与之比较的对象。
返回:如果对象相同,则返回 true
;否则,返回 false
。
另请参见:getTime()
compareTo
public int compareTo(Date anotherDate) 比较两个日期的顺序。
指定者:接口 Comparable<Date>
中的 compareTo
参数:anotherDate
- 要比较的 Date
。
返回:如果参数 Date 等于此 Date,则返回值 0
;如果此 Date 在 Date 参数之前,则返回小于 0
的值;如果此 Date 在 Date 参数之后,则返回大于 0
的值。
抛出:NullPointerException
- 如果 anotherDate
为 null。
从以下版本开始:1.2
hashCode
public int hashCode()
返回此对象的哈希码值。结果是 getTime()
方法返回的基本 long 值的两部分的异或。也就是说,哈希码就是以下表达式的值:
(int)(this.getTime()^(this.getTime() >>> 32))
返回:此对象的哈希码值。
另请参见:Object.equals(java.lang.Object)
, Hashtable
toString
public String toString()
把此 Date
对象转换为以下形式的 String
:
dow mon dd hh:mm:ss zzz yyyy
其中:
- dow 是一周中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat)。
- mon 是月份 (Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec)。
- dd 是一月中的某一天(01 至 31),显示为两位十进制数。
- hh 是一天中的小时(00 至 23),显示为两位十进制数。
- mm 是小时中的分钟(00 至 59),显示为两位十进制数。
- ss 是分钟中的秒数(00 至 61),显示为两位十进制数。
- zzz 是时区(并可以反映夏令时)。标准时区缩写包括方法 parse 识别的时区缩写。如果不提供时区信息,则 zzz 为空,即根本不包括任何字符。
- yyyy 是年份,显示为 4 位十进制数。
返回:此日期的字符串表示形式。
另请参见:toLocaleString()
, toGMTString()
java.util.Calendar Calendar类
所有已实现的接口:
Serializable, Cloneable, Comparable<Calendar>
直接已知子类:
public abstract class Calendar
extends Object
implements Serializable, Cloneable, Comparable<Calendar>
Calendar
类是一个抽象类,它为特定瞬间与一组诸如 YEAR
、MONTH
、DAY_OF_MONTH
、HOUR
等 日历字段
之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。瞬间可用毫秒值来表示,它是距历元(即格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000,格里高利历)的偏移量。
该类还为实现包范围外的具体日历系统提供了其他字段和方法。这些字段和方法被定义为 protected
。
与其他语言环境敏感类一样,Calendar
提供了一个类方法 getInstance
,以获得此类型的一个通用的对象。Calendar
的 getInstance
方法返回一个 Calendar
对象,其日历字段已由当前日期和时间初始化:
Calendar rightNow = Calendar.getInstance();
Calendar
对象能够生成为特定语言和日历风格实现日期-时间格式化所需的所有日历字段值,例如,日语-格里高里历,日语-传统日历。Calendar
定义了某些日历字段返回值的范围,以及这些值的含义。例如,对于所有日历,日历系统第一个月的值是 MONTH == JANUARY
。其他值是由具体子类(例如 ERA
)定义的。有关此内容的细节,请参阅每个字段的文档和子类文档。
获得并设置日历字段值
可以通过调用 set
方法来设置日历字段值。在需要计算时间值(距历元所经过的毫秒)或日历字段值之前,不会解释 Calendar
中的所有字段值设置。调用 get
、getTimeInMillis
、getTime
、add
和 roll
涉及此类计算。
宽松性
Calendar
有两种解释日历字段的模式,即 lenient 和 non-lenient。当 Calendar
处于 lenient 模式时,它可接受比它所生成的日历字段范围更大范围内的值。当 Calendar
重新计算日历字段值,以便由 get()
返回这些值时,所有日历字段都被标准化。例如,lenient 模式下的 GregorianCalendar
将 MONTH == JANUARY
、DAY_OF_MONTH == 32
解释为 February 1。
当 Calendar
处于 non-lenient 模式时,如果其日历字段中存在任何不一致性,它都会抛出一个异常。例如,GregorianCalendar
总是在 1 与月份的长度之间生成 DAY_OF_MONTH
值。如果已经设置了任何超出范围的字段值,那么在计算时间或日历字段值时,处于 non-lenient 模式下的 GregorianCalendar
会抛出一个异常。
第一个星期
Calendar
使用两个参数定义了特定于语言环境的 7 天制星期:星期的第一天和第一个星期中的最小一天(从 1 到 7)。这些数字取自构造 Calendar
时的语言环境资源数据。还可以通过为其设置值的方法来显式地指定它们。
在设置或获得 WEEK_OF_MONTH
或 WEEK_OF_YEAR
字段时,Calendar
必须确定一个月或一年的第一个星期,以此作为参考点。一个月或一年的第一个星期被确定为开始于 getFirstDayOfWeek()
的最早七天,它最少包含那一个月或一年的 getMinimalDaysInFirstWeek()
天数。第一个星期之前的各星期编号为 ...、-1、0;之后的星期编号为 2、3、...。注意,get()
返回的标准化编号方式可能有所不同。例如,特定 Calendar
子类可能将某一年第 1 个星期之前的那个星期指定为前一年的第 n
个星期。
日历字段解析
在计算日历字段中的日期和时间时,可能没有足够的信息用于计算(例如只有年和月,但没有日),或者可能有不一致的信息( 例如 "Tuesday, July 15, 1996"(格林威治时间)——实际上,1996 年 7 月 15 日是星期一 )。Calendar
将解析日历字段值,以便用以下方式确定日期和时间。
如果日历字段值中存在任何冲突,则 Calendar
将为最近设置的日历字段提供优先权。以下是日历字段的默认组合。将使用由最近设置的单个字段所确定的最近组合。
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
HOUR_OF_DAY AM_PM + HOUR
如果在选定的字段组合中,还有尚未设置值的任一日历字段,那么 Calendar
将使用其默认值。每个字段的默认值可能依据具体的日历系统而有所不同。例如,在 GregorianCalendar
中,字段的默认值与历元起始部分的字段值相同:即 YEAR = 1970
、MONTH = JANUARY
、DAY_OF_MONTH = 1
,等等。
注: 对于某些特别时间的解释可能会有某些歧义,可以用下列方式解决:
- 23:59 是一天中的最后一分钟,而 00:00 是下一天的第一分钟。因此,1999 年 12 月 31 日的 23:59 < 2000 年 1 月 1 日的 00:00。
- 尽管从历史上看不够精确,但午夜也属于 "am",,中午属于 "pm",所以在同一天,12:00 am ( 午夜 ) < 12:01 am,12:00 pm ( 中午 ) < 12:01 pm。
日期或时间格式字符串不是日历定义的一部分,因为在运行时,用户必须能够修改或重写它们。可以使用 DateFormat
格式化日期。
字段操作
可以使用三种方法更改日历字段:set()
、add()
和 roll()
。
set(f, value)
将日历字段 f
更改为 value
。此外,它设置了一个内部成员变量,以指示日历字段 f
已经被更改。尽管日历字段 f
是立即更改的,但是直到下次调用 get()
、getTime()
、getTimeInMillis()
、add()
或 roll()
时才会重新计算日历的时间值(以毫秒为单位)。因此,多次调用 set()
不会触发多次不必要的计算。使用 set()
更改日历字段的结果是,其他日历字段也可能发生更改,这取决于日历字段、日历字段值和日历系统。此外,在重新计算日历字段之后,get(f)
没必要通过调用 set
方法返回 value
集合。具体细节是通过具体的日历类确定的。
示例:假定 GregorianCalendar
最初被设置为 1999 年 8 月 31 日。调用 set(Calendar.MONTH, Calendar.SEPTEMBER)
将该日期设置为 1999 年 9 月 31 日。如果随后调用 getTime()
,那么这是解析 1999 年 10 月 1 日的一个暂时内部表示。但是,在调用 getTime()
之前调用 set(Calendar.DAY_OF_MONTH, 30)
会将该日期设置为 1999 年 9 月 30 日,因为在调用 set()
之后没有发生重新计算。
add(f, delta)
将 delta
添加到 f
字段中。这等同于调用 set(f, get(f) + delta)
,但要带以下两个调整:
Add 规则 1。调用后
f
字段的值减去调用前f
字段的值等于delta
,以字段f
中发生的任何溢出为模。溢出发生在字段值超出其范围时,结果,下一个更大的字段会递增或递减,并将字段值调整回其范围内。Add 规则 2。如果期望某一个更小的字段是不变的,但让它等于以前的值是不可能的,因为在字段
f
发生更改之后,或者在出现其他约束之后,比如时区偏移量发生更改,它的最大值和最小值也在发生更改,然后它的值被调整为尽量接近于所期望的值。更小的字段表示一个更小的时间单元。HOUR
是一个比DAY_OF_MONTH
小的字段。对于不期望是不变字段的更小字段,无需进行任何调整。日历系统会确定期望不变的那些字段。
此外,与 set()
不同,add()
强迫日历系统立即重新计算日历的毫秒数和所有字段。
示例:假定 GregorianCalendar
最初被设置为 1999 年 8 月 31 日。调用 add(Calendar.MONTH, 13)
将日历设置为 2000 年 9 月 30 日。Add 规则 1 将 MONTH
字段设置为 September,因为向 August 添加 13 个月得出的就是下一年的 September。因为在 GregorianCalendar
中,DAY_OF_MONTH
不可能是 9 月 31 日,所以 add 规则 2 将 DAY_OF_MONTH
设置为 30,即最可能的值。尽管它是一个更小的字段,但不能根据规则 2 调整 DAY_OF_WEEK
,因为在 GregorianCalendar
中的月份发生变化时,该值也需要发生变化。
roll(f, delta)
将 delta
添加到 f
字段中,但不更改更大的字段。这等同于调用 add(f, delta)
,但要带以下调整:
Roll 规则。在完成调用后,更大的字段无变化。更大的字段表示一个更大的时间单元。
DAY_OF_MONTH
是一个比HOUR
大的字段。
示例:请参阅 GregorianCalendar.roll(int, int)
。
使用模型。为了帮助理解 add()
和 roll()
的行为,假定有一个用户界面组件,它带有用于月、日、年和底层 GregorianCalendar
的递增或递减按钮。如果从界面上读取的日期为 1999 年 1 月 31 日,并且用户按下月份的递增按钮,那么应该得到什么?如果底层实现使用 set()
,那么可以将该日期读为 1999 年 3 月 3 日。更好的结果是 1999 年 2 月 28 日。此外,如果用户再次按下月份的递增按钮,那么该日期应该读为 1999 年 3 月 31 日,而不是 1999 年 3 月 28 日。通过保存原始日期并使用 add()
或 roll()
,根据是否会影响更大的字段,用户界面可以像大多数用户所期望的那样运行。
从以下版本开始:JDK1.1
字段摘要
字段摘要 | |
---|---|
static int |
ALL_STYLES 指示所有风格名称的 getDisplayNames 的风格说明符,比如 "January" 和 "Jan"。 |
static int |
AM 指示从午夜到中午之前这段时间的 AM_PM 字段值。 |
static int |
AM_PM get 和 set 的字段数字,指示 HOUR 是在中午之前还是在中午之后。 |
static int |
APRIL 指示在格里高利历和罗马儒略历中一年中第四个月的 MONTH 字段值。 |
protected boolean |
areFieldsSet 如果 fields[] 与当前的设置时间同步,则返回 true。 |
static int |
AUGUST 指示在格里高利历和罗马儒略历中一年中第八个月的 MONTH 字段值。 |
static int |
DATE get 和 set 的字段数字,指示一个月中的某天。 |
static int |
DAY_OF_MONTH get 和 set 的字段数字,指示一个月中的某天。 |
static int |
DAY_OF_WEEK get 和 set 的字段数字,指示一个星期中的某天。 |
static int |
DAY_OF_WEEK_IN_MONTH get 和 set 的字段数字,指示当前月中的第几个星期。 |
static int |
DAY_OF_YEAR get 和 set 的字段数字,指示当前年中的天数。 |
static int |
DECEMBER 指示在格里高利历和罗马儒略历中一年中第十二个月的 MONTH 字段值。 |
static int |
DST_OFFSET get 和 set 的字段数字,以毫秒为单位指示夏令时的偏移量。 |
static int |
ERA 指示年代的 get 和 set 的字段数字,比如罗马儒略历中的 AD 或 BC。 |
static int |
FEBRUARY 指示在格里高利历和罗马儒略历中一年中第二个月的 MONTH 字段值。 |
static int |
FIELD_COUNT get 和 set 可识别的不同字段的数量。 |
protected int[] |
fields 此日历当前设置时间的日历字段值。 |
static int |
FRIDAY 指示 Friday 的 DAY_OF_WEEK 字段值。 |
static int |
HOUR get 和 set 的字段数字,指示上午或下午的小时。 |
static int |
HOUR_OF_DAY get 和 set 的字段数字,指示一天中的小时。 |
protected boolean[] |
isSet 通知是否设置了该日历某一指定日历字段的标志。 |
protected boolean |
isTimeSet 如果 time 值是一个有效值,则返回 true。 |
static int |
JANUARY 指示在格里高利历和罗马儒略历中一年中第一个月的 MONTH 字段值。 |
static int |
JULY 指示在格里高利历和罗马儒略历中一年中第七个月的 MONTH 字段值。 |
static int |
JUNE 指示在格里高利历和罗马儒略历中一年中第六个月的 MONTH 字段值。 |
static int |
LONG 指示长名称的 getDisplayName 和 getDisplayNames 的风格说明符,比如 "January"。 |
static int |
MARCH 指示在格里高利历和罗马儒略历中一年中第三个月的 MONTH 字段值。 |
static int |
MAY 指示在格里高利历和罗马儒略历中一年中第五个月的 MONTH 字段值。 |
static int |
MILLISECOND get 和 set 的字段数字,指示一秒中的毫秒。 |
static int |
MINUTE get 和 set 的字段数字,指示一小时中的分钟。 |
static int |
MONDAY 指示 Monday 的 DAY_OF_WEEK 字段值。 |
static int |
MONTH 指示月份的 get 和 set 的字段数字。 |
static int |
NOVEMBER 指示在格里高利历和罗马儒略历中一年中第十一个月的 MONTH 字段值。 |
static int |
OCTOBER 指示在格里高利历和罗马儒略历中一年中第十个月的 MONTH 字段值。 |
static int |
PM 指示从中午到午夜之前这段时间的 AM_PM 字段值。 |
static int |
SATURDAY 指示 Saturday 的 DAY_OF_WEEK 字段值。 |
static int |
SECOND get 和 set 的字段数字,指示一分钟中的秒。 |
static int |
SEPTEMBER 指示在格里高利历和罗马儒略历中一年中第九个月的 MONTH 字段值。 |
static int |
SHORT 指示短名称的 getDisplayName 和 getDisplayNames 的风格说明符,比如 "Jan"。 |
static int |
SUNDAY 指示 Sunday 的 DAY_OF_WEEK 字段值。 |
static int |
THURSDAY 指示 Thursday 的 DAY_OF_WEEK 字段值。 |
protected long |
time 日历的当前设置时间,以毫秒为单位,表示自格林威治标准时间 1970 年 1月 1 日 0:00:00 后经过的时间。 |
static int |
TUESDAY 指示 Tuesday 的 DAY_OF_WEEK 字段值。 |
static int |
UNDECIMBER 指示一年中第十三个月的 MONTH 字段值。 |
static int |
WEDNESDAY 指示 Wednesday 的 DAY_OF_WEEK 字段值。 |
static int |
WEEK_OF_MONTH get 和 set 的字段数字,指示当前月中的星期数。 |
static int |
WEEK_OF_YEAR get 和 set 的字段数字,指示当前年中的星期数。 |
static int |
YEAR 指示年的 get 和 set 的字段数字。 |
static int |
ZONE_OFFSET get 和 set 的字段数字,以毫秒为单位指示距 GMT 的大致偏移量。 |
构造方法摘要
构造方法摘要 | |
---|---|
protected |
Calendar() 构造一个带有默认时区和语言环境的 Calendar。 |
protected |
Calendar(TimeZone zone, Locale aLocale) 构造一个带有指定时区和语言环境的 Calendar。 |
方法摘要
方法摘要 | |
---|---|
abstract void |
add(int field, int amount) 根据日历的规则,为给定的日历字段添加或减去指定的时间量。 |
boolean |
after(Object when) 判断此 Calendar 表示的时间是否在指定 Object 表示的时间之后,返回判断结果。 |
boolean |
before(Object when) 判断此 Calendar 表示的时间是否在指定 Object 表示的时间之前,返回判断结果。 |
void |
clear() 将此 Calendar 的所日历字段值和时间值(从历元至现在的毫秒偏移量)设置成未定义。 |
void |
clear(int field) 将此 Calendar 的给定日历字段值和时间值(从历元至现在的毫秒偏移量)设置成未定义。 |
Object |
clone() 创建并返回此对象的一个副本。 |
int |
compareTo(Calendar anotherCalendar) 比较两个 Calendar 对象表示的时间值(从历元至现在的毫秒偏移量)。 |
protected void |
complete() 填充日历字段中所有未设置的字段。 |
protected abstract void |
computeFields() 将当前毫秒时间值 time 转换为 fields[] 中的日历字段值。 |
protected abstract void |
computeTime() 将 fields[] 中的当前日历字段值转换为毫秒时间值 time 。 |
boolean |
equals(Object obj) 将此 Calendar 与指定 Object 比较。 |
int |
get(int field) 返回给定日历字段的值。 |
int |
getActualMaximum(int field) 给定此 Calendar 的时间值,返回指定日历字段可能拥有的最大值。 |
int |
getActualMinimum(int field) 给定此 Calendar 的时间值,返回指定日历字段可能拥有的最小值。 |
static Locale[] |
getAvailableLocales() 返回所有语言环境的数组,此类的 getInstance 方法可以为其返回本地化的实例。 |
String |
getDisplayName(int field, int style, Locale locale) 返回给定 style 和 locale 下的日历 field 值的字符串表示形式。 |
Map<String,Integer> |
getDisplayNames(int field, int style, Locale locale) 返回给定 style 和 locale 下包含日历 field 所有名称的 Map 及其相应字段值。 |
int |
getFirstDayOfWeek() 获取一星期的第一天;例如,在美国,这一天是 SUNDAY ,而在法国,这一天是 MONDAY 。 |
abstract int |
getGreatestMinimum(int field) 返回此 Calendar 实例给定日历字段的最高的最小值。 |
static Calendar |
getInstance() 使用默认时区和语言环境获得一个日历。 |
static Calendar |
getInstance(Locale aLocale) 使用默认时区和指定语言环境获得一个日历。 |
static Calendar |
getInstance(TimeZone zone) 使用指定时区和默认语言环境获得一个日历。 |
static Calendar |
getInstance(TimeZone zone, Locale aLocale) 使用指定时区和语言环境获得一个日历。 |
abstract int |
getLeastMaximum(int field) 返回此 Calendar 实例给定日历字段的最低的最大值。 |
abstract int |
getMaximum(int field) 返回此 Calendar 实例给定日历字段的最大值。 |
int |
getMinimalDaysInFirstWeek() 获取一年中第一个星期所需的最少天数,例如,如果定义第一个星期包含一年第一个月的第一天,则此方法将返回 1。 |
abstract int |
getMinimum(int field) 返回此 Calendar 实例给定日历字段的最小值。 |
Date |
getTime() 返回一个表示此 Calendar 时间值(从历元至现在的毫秒偏移量)的 Date 对象。 |
long |
getTimeInMillis() 返回此 Calendar 的时间值,以毫秒为单位。 |
TimeZone |
getTimeZone() 获得时区。 |
int |
hashCode() 返回该此日历的哈希码。 |
protected int |
internalGet(int field) 返回给定日历字段的值。 |
boolean |
isLenient() 判断日期/时间的解释是否为宽松的。 |
boolean |
isSet(int field) 确定给定日历字段是否已经设置了一个值,其中包括因为调用 get 方法触发内部字段计算而导致已经设置该值的情况。 |
abstract void |
roll(int field, boolean up) 在给定的时间字段上添加或减去(上/下)单个时间单元,不更改更大的字段。 |
void |
roll(int field, int amount) 向指定日历字段添加指定(有符号的)时间量,不更改更大的字段。 |
void |
set(int field, int value) 将给定的日历字段设置为给定值。 |
void |
set(int year, int month, int date) 设置日历字段 YEAR 、MONTH 和 DAY_OF_MONTH 的值。 |
void |
设置日历字段 |
void |
set(int year, int month, int date, int hourOfDay, int minute, int second) 设置字段 YEAR 、MONTH 、DAY_OF_MONTH 、HOUR 、MINUTE 和 SECOND 的值。 |
void |
setFirstDayOfWeek(int value) 设置一星期的第一天是哪一天;例如,在美国,这一天是 SUNDAY ,而在法国,这一天是 MONDAY 。 |
void |
setLenient(boolean lenient) 指定日期/时间解释是否是宽松的。 |
void |
setMinimalDaysInFirstWeek(int value) 设置一年中第一个星期所需的最少天数,例如,如果定义第一个星期包含一年第一个月的第一天,则使用值 1 调用此方法。 |
void |
setTime(Date date) 使用给定的 Date 设置此 Calendar 的时间。 |
void |
setTimeInMillis(long millis) 用给定的 long 值设置此 Calendar 的当前时间值。 |
void |
setTimeZone(TimeZone value) 使用给定的时区值来设置时区。 |
String |
toString() 返回此日历的字符串表示形式。 |
字段详细信息
ERA
public static final int ERA
指示年代的 get
和 set
的字段数字,比如罗马儒略历中的 AD 或 BC。这是一个特定于日历的值;请参阅子类文档。
另请参见:GregorianCalendar.AD
, GregorianCalendar.BC
, 常量字段值
YEAR
public static final int YEAR
指示年的 get
和 set
的字段数字。这是一个特定于日历的值;请参阅子类文档。
另请参见:常量字段值
MONTH
public static final int MONTH
指示月份的 get
和 set
的字段数字。这是一个特定于日历的值。在格里高利历和罗马儒略历中一年中的第一个月是 JANUARY
,它为 0;最后一个月取决于一年中的月份数。
另请参见:JANUARY
, FEBRUARY
, MARCH
, APRIL
, MAY
, JUNE
, JULY
, AUGUST
, SEPTEMBER
, OCTOBER
, NOVEMBER
, DECEMBER
, UNDECIMBER
, 常量字段值
WEEK_OF_YEAR
public static final int WEEK_OF_YEAR
get
和 set
的字段数字,指示当前年中的星期数。正如 getFirstDayOfWeek()
和 getMinimalDaysInFirstWeek()
所定义的那样,一年中第一个星期的值为 1。子类定义一年第一个星期之前的天数,即 WEEK_OF_YEAR
的值。
另请参见:getFirstDayOfWeek()
, getMinimalDaysInFirstWeek()
, 常量字段值
WEEK_OF_MONTH
public static final int WEEK_OF_MONTH
get
和 set
的字段数字,指示当前月中的星期数。正如 getFirstDayOfWeek()
和 getMinimalDaysInFirstWeek()
所定义的那样,一个月中第一个星期的值为 1。子类定义一个月第一个星期之前的天数,即 WEEK_OF_MONTH
的值。
另请参见:getFirstDayOfWeek()
, getMinimalDaysInFirstWeek()
, 常量字段值
DATE
public static final int DATE
get
和 set
的字段数字,指示一个月中的某天。它与 DAY_OF_MONTH
是同义词。一个月中第一天的值为 1。
另请参见:DAY_OF_MONTH
, 常量字段值
DAY_OF_MONTH
public static final int DAY_OF_MONTH
get
和 set
的字段数字,指示一个月中的某天。它与 DATE
是同义词。一个月中第一天的值为 1。
DAY_OF_YEAR
public static final int DAY_OF_YEAR
get
和 set
的字段数字,指示当前年中的天数。一年中第一天的值为 1。
另请参见:常量字段值
DAY_OF_WEEK
public static final int DAY_OF_WEEK
get
和 set
的字段数字,指示一个星期中的某天。该字段可取的值为 SUNDAY
、MONDAY
、TUESDAY
、WEDNESDAY
、THURSDAY
、FRIDAY
和 SATURDAY
。
另请参见:SUNDAY
, MONDAY
, TUESDAY
, WEDNESDAY
, THURSDAY
, FRIDAY
, SATURDAY
, 常量字段值
DAY_OF_WEEK_IN_MONTH
public static final int DAY_OF_WEEK_IN_MONTH
get
和 set
的字段数字,指示当前月中的第几个星期。与 DAY_OF_WEEK
字段一起使用时,就可以唯一地指定某月中的某一天。与 WEEK_OF_MONTH
和 WEEK_OF_YEAR
不同,该字段的值并不 取决于 getFirstDayOfWeek()
或 getMinimalDaysInFirstWeek()
。DAY_OF_MONTH
1 到 7
总是对应于 DAY_OF_WEEK_IN_MONTH 1
;8
到 14
总是对应于 DAY_OF_WEEK_IN_MONTH 2
,依此类推。DAY_OF_WEEK_IN_MONTH 0
表示 DAY_OF_WEEK_IN_MONTH 1
之前的那个星期。负值是从一个月的末尾开始逆向计数,因此,一个月的最后一个星期天被指定为 DAY_OF_WEEK = SUNDAY, DAY_OF_WEEK_IN_MONTH = -1
。因为负值是逆向计数的,所以它们在月份中的对齐方式通常与正值的不同。例如,如果一个月有 31 天,那么 DAY_OF_WEEK_IN_MONTH -1
将与 DAY_OF_WEEK_IN_MONTH 5
和 DAY_OF_WEEK_IN_MONTH 4
的末尾相重叠。
另请参见:DAY_OF_WEEK
, WEEK_OF_MONTH
, 常量字段值
AM_PM
public static final int AM_PM
get
和 set
的字段数字,指示 HOUR
是在中午之前还是在中午之后。例如,在 10:04:15.250 PM 这一时刻,AM_PM
为 PM
。
HOUR
public static final int HOUR
get
和 set
的字段数字,指示上午或下午的小时。HOUR
用于 12 小时制时钟 (0 - 11)。中午和午夜用 0 表示,不用 12 表示。例如,在 10:04:15.250 PM 这一时刻,HOUR
为 10。
另请参见:AM_PM
, HOUR_OF_DAY
, 常量字段值
HOUR_OF_DAY
public static final int HOUR_OF_DAY
get
和 set
的字段数字,指示一天中的小时。HOUR_OF_DAY
用于 24 小时制时钟。例如,在 10:04:15.250 PM 这一时刻,HOUR_OF_DAY
为 22。
MINUTE
public static final int MINUTE
get
和 set
的字段数字,指示一小时中的分钟。例如,在 10:04:15.250 PM 这一时刻,MINUTE
为 4。
另请参见:常量字段值
SECOND
public static final int SECOND
get
和 set
的字段数字,指示一分钟中的秒。例如,在 10:04:15.250 PM 这一时刻,SECOND
为 15。
另请参见:常量字段值
MILLISECOND
public static final int MILLISECOND
get
和 set
的字段数字,指示一秒中的毫秒。例如,在 10:04:15.250 PM 这一时刻,MILLISECOND
为 250。
另请参见:常量字段值
ZONE_OFFSET
public static final int ZONE_OFFSET
get
和 set
的字段数字,以毫秒为单位指示距 GMT 的大致偏移量。
如果 TimeZone
实现子类支持历史上用过的 GMT 偏移量更改,则此字段可反应此 Calendar
时区的正确 GMT 偏移量值。
另请参见:常量字段值
DST_OFFSET
public static final int DST_OFFSET
get
和 set
的字段数字,以毫秒为单位指示夏令时的偏移量。
如果 TimeZone
实现子类支持历史上用过的 Daylight Saving Time 时间表更改,则此字段可反应此 Calendar
时区的正确夏令时偏移量值。
另请参见:常量字段值
FIELD_COUNT
public static final int FIELD_COUNT
get
和 set
可识别的不同字段的数量。字段编号的范围是从 0 到 FIELD_COUNT-1
。
另请参见:常量字段值
SUNDAY
public static final int SUNDAY
指示 Sunday 的 DAY_OF_WEEK
字段值。
另请参见:常量字段值
MONDAY
public static final int MONDAY
指示 Monday 的 DAY_OF_WEEK
字段值。
另请参见:常量字段值
TUESDAY
public static final int TUESDAY
指示 Tuesday 的 DAY_OF_WEEK
字段值。
另请参见:常量字段值
WEDNESDAY
public static final int WEDNESDAY
指示 Wednesday 的 DAY_OF_WEEK
字段值。
另请参见:常量字段值
THURSDAY
public static final int THURSDAY
指示 Thursday 的 DAY_OF_WEEK
字段值。
另请参见:常量字段值
FRIDAY
public static final int FRIDAY
指示 Friday 的 DAY_OF_WEEK
字段值。
另请参见:常量字段值
SATURDAY
public static final int SATURDAY
指示 Saturday 的 DAY_OF_WEEK
字段值。
另请参见:常量字段值
JANUARY
public static final int JANUARY
指示在格里高利历和罗马儒略历中一年中第一个月的 MONTH
字段值。
另请参见:常量字段值
FEBRUARY
public static final int FEBRUARY
指示在格里高利历和罗马儒略历中一年中第二个月的 MONTH
字段值。
另请参见:常量字段值
MARCH
public static final int MARCH
指示在格里高利历和罗马儒略历中一年中第三个月的 MONTH
字段值。
另请参见:常量字段值
APRIL
public static final int APRIL
指示在格里高利历和罗马儒略历中一年中第四个月的 MONTH
字段值。
另请参见:常量字段值
MAY
public static final int MAY
指示在格里高利历和罗马儒略历中一年中第五个月的 MONTH
字段值。
另请参见:常量字段值
JUNE
public static final int JUNE
指示在格里高利历和罗马儒略历中一年中第六个月的 MONTH
字段值。
另请参见:常量字段值
JULY
public static final int JULY
指示在格里高利历和罗马儒略历中一年中第七个月的 MONTH
字段值。
另请参见:常量字段值
AUGUST
public static final int AUGUST
指示在格里高利历和罗马儒略历中一年中第八个月的 MONTH
字段值。
另请参见:常量字段值
SEPTEMBER
public static final int SEPTEMBER
指示在格里高利历和罗马儒略历中一年中第九个月的 MONTH
字段值。
另请参见:常量字段值
OCTOBER
public static final int OCTOBER
指示在格里高利历和罗马儒略历中一年中第十个月的 MONTH
字段值。
另请参见:常量字段值
NOVEMBER
public static final int NOVEMBER
指示在格里高利历和罗马儒略历中一年中第十一个月的 MONTH
字段值。
另请参见:常量字段值
DECEMBER
public static final int DECEMBER
指示在格里高利历和罗马儒略历中一年中第十二个月的 MONTH
字段值。
另请参见:常量字段值
UNDECIMBER
public static final int UNDECIMBER
指示一年中第十三个月的 MONTH
字段值。尽管 GregorianCalendar
没有使用该值,但阴历会使用。
另请参见:常量字段值
AM
public static final int AM
指示从午夜到中午之前这段时间的 AM_PM
字段值。
另请参见:常量字段值
PM
public static final int PM
指示从中午到午夜之前这段时间的 AM_PM
字段值。
另请参见:常量字段值
ALL_STYLES
public static final int ALL_STYLES
指示所有风格名称的 getDisplayNames
的风格说明符,比如 "January" 和 "Jan"。
从以下版本开始:1.6
SHORT
public static final int SHORT 指示短名称的getDisplayName
和getDisplayNames
的风格说明符,比如 "Jan"。
从以下版本开始:1.6
LONG
public static final int LONG 指示长名称的getDisplayName
和getDisplayNames
的风格说明符,比如 "January"。
从以下版本开始:1.6
fields
protected int[] fields
此日历当前设置时间的日历字段值。这是一个 FIELD_COUNT
整数数组,索引值为 ERA 到 DST_OFFSET
。
isSet
protected boolean[] isSet
通知是否设置了该日历某一指定日历字段的标志。新的对象没有设置任何字段。在第一次调用生成该字段的某一方法后,这些字段都将保留调用之后的设置。这是一个 FIELD_COUNT
布尔值数组,索引值为 ERA 到 DST_OFFSET
。
time
protected long time
日历的当前设置时间,以毫秒为单位,表示自格林威治标准时间 1970 年 1月 1 日 0:00:00 后经过的时间。
另请参见:isTimeSet
isTimeSet
protected boolean isTimeSet
如果 time
值是一个有效值,则返回 true。通过更改 field[]
的项,可以使时间无效。
另请参见:time
areFieldsSet
protected boolean areFieldsSet
如果 fields[]
与当前的设置时间同步,则返回 true。如果返回 false,则在下一次试图获得某一字段的值时,将强行重新计算 time
当前值中的所有字段。
构造方法详细信息
Calendar
protected Calendar()
构造一个带有默认时区和语言环境的 Calendar。
Calendar
protected Calendar(TimeZone zone,Locale aLocale)
构造一个带有指定时区和语言环境的 Calendar。
参数:zone
- 要使用的时区 aLocale
- 用于星期数据的语言环境
方法详细信息
getInstance
public static Calendar getInstance()
使用默认时区和语言环境获得一个日历。返回的 Calendar
基于当前时间,使用了默认时区和默认语言环境。
返回:一个 Calendar。
getInstance
public static Calendar getInstance(TimeZone zone)
使用指定时区和默认语言环境获得一个日历。返回的 Calendar
基于当前时间,使用了给定时区和默认语言环境。
参数:zone
- 要使用的时区
返回:一个 Calendar。
getInstance
public static Calendar getInstance(Locale aLocale)
使用默认时区和指定语言环境获得一个日历。返回的 Calendar
基于当前时间,使用了默认时区和给定的语言环境。
参数:aLocale
- 用于星期数据的语言环境
返回:一个 Calendar。
getInstance
public static Calendar getInstance(TimeZone zone,Locale aLocale)
使用指定时区和语言环境获得一个日历。返回的 Calendar
基于当前时间,使用了给定的时区和给定的语言环境。
参数:zone
- 要使用的时区。aLocale
- 用于星期数据的语言环境
返回:一个 Calendar。
getAvailableLocales
public static Locale[] getAvailableLocales()
返回所有语言环境的数组,此类的 getInstance
方法可以为其返回本地化的实例。返回的数组必须至少包含一个 Locale
实例,它等同 Locale.US
。
返回:语言环境的数组,对于该数组,本地化的 Calendar
实例是可用的。
computeTime
protected abstract void computeTime()
将 fields[]
中的当前日历字段值转换为毫秒时间值 time
。
另请参见:complete()
, computeFields()
computeFields
protected abstract void computeFields()
将当前毫秒时间值 time
转换为 fields[]
中的日历字段值。这允许您将该日历字段值与为日历设置的新时间同步。并不 首先重新计算该时间;为了重新计算时间和字段,请调用 complete()
方法。
另请参见:computeTime()
getTime
public final Date getTime()
返回一个表示此 Calendar
时间值(从历元至现在的毫秒偏移量)的 Date
对象。
返回:表示时间值的 Date
。
另请参见:setTime(Date)
, getTimeInMillis()
setTime
public final void setTime(Date date)
使用给定的 Date
设置此 Calendar 的时间。
注:使用 Date(Long.MAX_VALUE)
或 Date(Long.MIN_VALUE)
调用 setTime()
可能产生来自 get()
的错误字段值。
参数:date
- 给定的 Date。
另请参见:getTime()
, setTimeInMillis(long)
getTimeInMillis
public long getTimeInMillis()
返回此 Calendar 的时间值,以毫秒为单位。
返回:当前时间,以从历元至现在所经过的 UTC 毫秒数形式。
另请参见:getTime()
, setTimeInMillis(long)
setTimeInMillis
public void setTimeInMillis(long millis)
用给定的 long 值设置此 Calendar 的当前时间值。
参数:millis
- 新时间,以从历元至现在所经过的 UTC 毫秒数形式。
另请参见:setTime(Date)
, getTimeInMillis()
get
public int get(int field)
返回给定日历字段的值。在 lenient 模式下,所有日历字段都被标准化。在 non-lenient 模式下,所有日历字段都是经过验证的,如果任何日历字段有超出范围的值,则此方法抛出一个异常。标准化和验证都是通过 complete()
方法处理的,这个过程与日历系统有关。
参数:field
- 给定的日历字段。
返回:给定日历字段的值。
抛出:ArrayIndexOutOfBoundsException
- 如果指定字段超出范围 (field < 0 || field >= FIELD_COUNT
)。
另请参见:set(int,int)
, complete()
internalGet
protected final int internalGet(int field)
返回给定日历字段的值。此方法不涉及字段值的标准化或验证。
参数:field
- 给定的日历字段。
返回:给定日历字段的值。
另请参见:get(int)
set
public void set(int field,int value)
将给定的日历字段设置为给定值。不管处于何种宽松性模式下,该值都不由此方法进行解释。
参数:
field
- 给定的日历字段。
value
- 给定日历字段所要设置的值。
抛出:ArrayIndexOutOfBoundsException
- 如果指定字段超出范围 (field < 0 || field >= FIELD_COUNT
),并且处于 non-lenient 模式下。
另请参见:set(int,int,int)
, set(int,int,int,int,int)
, set(int,int,int,int,int,int)
, get(int)
set
public final void set(int year,int month,int date)
设置日历字段 YEAR
、MONTH
和 DAY_OF_MONTH
的值。保留其他日历字段以前的值。如果不需要这样做,则先调用 clear()
。
参数:
year
- 用来设置 YEAR
日历字段的值。
month
- 用来设置 MONTH
日历字段的值。Month 值是基于 0 的。例如,0 表示 January。
date
- 用来设置 DAY_OF_MONTH
日历字段的值。
另请参见:set(int,int)
, set(int,int,int,int,int)
, set(int,int,int,int,int,int)
set
public final void set(int year,int month,int date,int hourOfDay,int minute)
设置日历字段 YEAR
、MONTH
、DAY_OF_MONTH
、HOUR_OF_DAY
和 MINUTE
的值。保留其他字段以前的值。如果不需要这样做,则先调用 clear()
。
参数:
year
- 用来设置 YEAR
日历字段的值。
month
- 用来设置 MONTH
日历字段的值。Month 值是基于 0 的。例如,0 表示 January。
date
- 用来设置 DAY_OF_MONTH
日历字段的值。
hourOfDay
- 用来设置 HOUR_OF_DAY
日历字段的值。
minute
- 用来设置 MINUTE
日历字段的值。
另请参见:set(int,int)
, set(int,int,int)
, set(int,int,int,int,int,int)
set
public final void set(int year,int month,int date,int hourOfDay,int minute,int second)
设置字段 YEAR
、MONTH
、DAY_OF_MONTH
、HOUR
、MINUTE
和 SECOND
的值。保留其他字段以前的值。如果不需要这样做,则先调用 clear()
。
参数:
year
- 用来设置 YEAR
日历字段的值。
month
- 用来设置 MONTH
日历字段的值。Month 值是基于 0 的。例如,0 表示 January。
date
- 用来设置 DAY_OF_MONTH
日历字段的值。
hourOfDay
- 用来设置 HOUR_OF_DAY
日历字段的值。
minute
- 用来设置 MINUTE
日历字段的值。
second
- 用来设置 SECOND
日历字段的值。
另请参见:set(int,int)
, set(int,int,int)
, set(int,int,int,int,int)
clear
public final void clear()
将此 Calendar
的所日历字段值和时间值(从历元至现在的毫秒偏移量)设置成未定义。这意味着 isSet()
对于所有的日历字段都将返回 false
,并且日期和时间计算会将这些字段作为从未设置的字段对待。Calendar
实现类可能对日期/时间计算使用字段的特定默认值。例如,如果未定义 YEAR
字段值,则 GregorianCalendar
会使用 1970。
另请参见:clear(int)
clear
public final void clear(int field)
将此 Calendar
的给定日历字段值和时间值(从历元至现在的毫秒偏移量)设置成未定义。这意味着 isSet(field)
将返回 false
,并且日期和时间计算会将该字段作为从未设置的字段对待。Calendar
实现类可能对日期和时间计算使用字段的特定默认值。
HOUR_OF_DAY
、HOUR
和 AM_PM
字段都是单独处理的,并且应用了一天中时间的解析规则。清除其中的一个字段不会重置此 Calendar
中的小时值。使用 set(Calendar.HOUR_OF_DAY, 0)
重置小时值。
参数:field
- 要清除的日历字段。
另请参见:clear()
isSet
public final boolean isSet(int field)
确定给定日历字段是否已经设置了一个值,其中包括因为调用 get
方法触发内部字段计算而导致已经设置该值的情况。
返回:如果给定日历字段已经设置了一个值,则返回 true
;否则返回 false
。
getDisplayName
public String getDisplayName(int field,int style,Locale locale)
返回给定 style
和 locale
下的日历 field
值的字符串表示形式。如果没有可用的字符串表示形式,则返回 null
。如果字符串表示形式可用于给定的日历 field
,则此方法调用 get(field)
来获取日历 field
值。
例如,如果此 Calendar
是 GregorianCalendar
并且其日期是 2005-01-01,那么 MONTH
字段的字符串表示形式在英语语言环境中将是 long 类型的 "January" 或者 short 类型的 "Jan"。然而,DAY_OF_MONTH
字段没有可用的字符串表示形式,并且此方法将返回 null
。
默认实现支持日历字段,DateFormatSymbols
在给定 locale
中具有此类名称。
参数:
field
- 其字符串表示形式返回的日历字段
style
- 应用于字符串表示形式的类型;SHORT
或 LONG
之一。
locale
- 字符串表示形式的语言环境
返回:给定 style
中给定 field
的字符串表示形式;如果没有可用的字符串表示形式,则返回 null
。
抛出:IllegalArgumentException
- 如果 field
或 style
无效,如果此 Calendar
处于 non-lenient 模式并且所有日历字段都有无效值。NullPointerException
- 如果 locale
为 null
从以下版本开始:1.6
getDisplayNames
public Map<String,Integer> getDisplayNames(int field,int style,Locale locale)
返回给定 style
和 locale
下包含日历 field
所有名称的 Map
及其相应字段值。例如,如果此 Calendar
是 GregorianCalendar
,则在英语语言环境的 short 类型中的返回映射将包含 "Jan" 到 JANUARY
,"Feb" 到 FEBRUARY
诸如此类。
可以考虑用其他日历字段值来确定显示名称集。例如,如果此 Calendar
是月与日的日历系统并且由 YEAR
字段给定的年值有闰月,此方法将返回包含闰月名称的月名称,并且月名称被映射到该年中其指定值。
默认实现支持 DateFormatSymbols
中包含的显示名称。例如,如果 field
是 MONTH
并且 style
是 ALL_STYLES
,则此方法返回包含 DateFormatSymbols.getShortMonths()
和 DateFormatSymbols.getMonths()
返回的所有字符串的 Map
。
参数:
field
- 其返回显示名称的日历字段
style
- 应用于显示名称的风格;SHORT
、LONG
或 ALL_STYLES
之一。
locale
- 显示名称的语言环境
返回:包含 style
和 locale
下的所有显示名称的 Map
及其字段值;如果没有显示名称,则返回 null
抛出:IllegalArgumentException
- 如果 field
或 style
无效,如果此 Calendar
处于 non-lenient 模式并且所有日历字段都有无效值。NullPointerException
- 如果 locale
为 null
从以下版本开始:1.6
complete
protected void complete()
填充日历字段中所有未设置的字段。首先,如果已经从日历字段值中计算出了时间值(从历元至现在的毫秒偏移量),则调用 computeTime()
方法。然后调用 computeFields()
方法来计算所有的日历字段值。
equals
public boolean equals(Object obj)
将此 Calendar
与指定 Object
比较。当且仅当参数是同一日历系统的 Calendar
对象时,结果才为 true
,该日历系统将同一 Calendar
参数下的同一时间值(从历元至现在的毫秒偏移量)表示为此对象。
Calendar
参数是通过 isLenient
、getFirstDayOfWeek
、getMinimalDaysInFirstWeek
和 getTimeZone
方法表示的值。如果在两个 Calendar
之间这些参数中存在任何不同之处,则此方法返回 false
。
使用 compareTo
方法来仅对时间值进行比较。
参数:obj
- 要与之比较的对象。
返回:如果此对象等于 obj
,则返回 true
;否则返回 false
。
另请参见:Object.hashCode()
, Hashtable
hashCode
public int hashCode() 返回该此日历的哈希码。
返回:此对象的哈希码值。
从以下版本开始:1.2
另请参见:Object.equals(java.lang.Object)
, Hashtable
before
public boolean before(Object when)
判断此 Calendar
表示的时间是否在指定 Object
表示的时间之前,返回判断结果。此方法等效于:
compareTo(when) < 0
当且仅当 when
是一个 Calendar
实例时才返回 true。否则该方法返回 false
。
参数:when
- 要比较的 Object
返回:如果此 Calendar
的时间在 when
表示的时间之前,则返回 true
;否则返回 false
。
另请参见:compareTo(Calendar)
after
public boolean after(Object when)
判断此 Calendar
表示的时间是否在指定 Object
表示的时间之后,返回判断结果。此方法等效于:
compareTo(when) > 0
当且仅当 when
是一个 Calendar
实例时才返回 true。否则该方法返回 false
。
参数:when
- 要比较的 Object
返回:如果此 Calendar
的时间在 when
表示的时间之后,则返回 true
;否则返回 false
。
另请参见:compareTo(Calendar)
compareTo
public int compareTo(Calendar anotherCalendar)
比较两个 Calendar
对象表示的时间值(从历元至现在的毫秒偏移量)。
指定者:接口 Comparable<Calendar>
中的 compareTo
参数:anotherCalendar
- 要比较的 Calendar
。
返回:如果参数表示的时间等于此 Calendar
表示的时间,则返回 0
值;如果此 Calendar
的时间在参数表示的时间之前,则返回小于 0
的值;如果此 Calendar
的时间在参数表示的时间之后,则返回大于 0
的值。
抛出:NullPointerException
- 如果指定的 Calendar
为 null
。IllegalArgumentException
- 如果因为无效的日历值而无法获得指定 Calendar
对象的时间值。
从以下版本开始:1.5
add
public abstract void add(int field,int amount)
根据日历的规则,为给定的日历字段添加或减去指定的时间量。例如,要从当前日历时间减去 5 天,可以通过调用以下方法做到这一点:
add(Calendar.DAY_OF_MONTH, -5)
。
参数:field
- 日历字段。amount
- 为字段添加的日期或时间量。
另请参见:roll(int,int)
, set(int,int)
roll
public abstract void roll(int field,boolean up)
在给定的时间字段上添加或减去(上/下)单个时间单元,不更改更大的字段。例如,要将当前日期向上滚动一天,可以通过调用以下方法做到这一点:
roll(Calendar.DATE, true)。在 year 或 Calendar.YEAR 字段上滚动时,将在从 1 到调用 getMaximum(Calendar.YEAR)
的返回值之间的范围内滚动 year 值。在 month 或 Calendar.MONTH 字段上滚动时,其他字段(如 date)可能发生冲突,因此需要更改它们。例如,在日期 01/31/96 上滚动 month 将产生 02/29/96 的日期。在 hour-in-day 或 Calendar.HOUR_OF_DAY 字段上滚动时,小时值会在 0 到 23 之间的范围内滚动,它是基于 0 的。
参数:field
- 时间字段。up
- 指示指定时间字段的值是向上滚动还是向下滚动。如果向上滚动,则使用 true,否则使用 false。
另请参见:add(int,int)
, set(int,int)
roll
public void roll(int field,int amount)
向指定日历字段添加指定(有符号的)时间量,不更改更大的字段。负的时间量意味着向下滚动。
注:Calendar
上的此默认实现只是重复地调用滚动一个单元的 roll()
版本。这可能并非总是正确的。例如,如果 DAY_OF_MONTH
字段为 31,则在 February 的范围内滚动会将它设置为 28。此函数的 GregorianCalendar
版本会小心地处理这个问题。其他子类还应该提供此函数的重写版本,以正确实现该功能。
参数:field
- 日历字段。 amount
- 要添加到日历 field
中的有符号时间量。
从以下版本开始:1.2
另请参见:roll(int,boolean)
, add(int,int)
, set(int,int)
setTimeZone
public void setTimeZone(TimeZone value) 使用给定的时区值来设置时区。
参数:value
- 给定的时区。
getTimeZone
public TimeZone getTimeZone() 获得时区。
返回:与此日历有关的时区对象。
setLenient
public void setLenient(boolean lenient)
指定日期/时间解释是否是宽松的。对于宽松的解释,可以将诸如 "February 942, 1996" 之类的日期视为等同于 1996 年 1 月 1 日后的第 941 天。而对于严格的(non-lenient)解释,这样的日期会导致抛出异常。默认情况下是宽松的。
参数:lenient
- 如果开启 lenient 模式,则为 true
;如果关闭此模式,则为 false
。
另请参见:isLenient()
, DateFormat.setLenient(boolean)
isLenient
public boolean isLenient()
判断日期/时间的解释是否为宽松的。
返回:如果此日历的解释模式是 lenient,则返回 true
;否则返回 false
。
另请参见:setLenient(boolean)
setFirstDayOfWeek
public void setFirstDayOfWeek(int value)
设置一星期的第一天是哪一天;例如,在美国,这一天是 SUNDAY
,而在法国,这一天是 MONDAY
。
参数:value
- 给出的一星期的第一天。
另请参见:getFirstDayOfWeek()
, getMinimalDaysInFirstWeek()
getFirstDayOfWeek
public int getFirstDayOfWeek()
获取一星期的第一天;例如,在美国,这一天是 SUNDAY
,而在法国,这一天是 MONDAY
。
返回:一星期的第一天。
另请参见:setFirstDayOfWeek(int)
, getMinimalDaysInFirstWeek()
setMinimalDaysInFirstWeek
public void setMinimalDaysInFirstWeek(int value)
设置一年中第一个星期所需的最少天数,例如,如果定义第一个星期包含一年第一个月的第一天,则使用值 1 调用此方法。如果最少天数必须是一整个星期,则使用值 7 调用此方法。
参数:value
- 一年中第一个星期所需的给定最少天数。
另请参见:getMinimalDaysInFirstWeek()
getMinimalDaysInFirstWeek
public int getMinimalDaysInFirstWeek()
获取一年中第一个星期所需的最少天数,例如,如果定义第一个星期包含一年第一个月的第一天,则此方法将返回 1。如果最少天数必须是一整个星期,则此方法将返回 7。
返回:一年中第一个星期所需的最少天数。
另请参见:setMinimalDaysInFirstWeek(int)
getMinimum
public abstract int getMinimum(int field)
返回此 Calendar
实例给定日历字段的最小值。最小值被定义为 get
方法为任何可能时间值返回的最小值。最小值取决于日历系统实例的特定参数。
参数:field
- 日历字段。
返回:给定日历字段的最小值。
另请参见:getMaximum(int)
, getGreatestMinimum(int)
, getLeastMaximum(int)
, getActualMinimum(int)
, getActualMaximum(int)
getMaximum
public abstract int getMaximum(int field)
返回此 Calendar
实例给定日历字段的最大值。最大值被定义为 get
方法为任何可能时间值返回的最大值。最大值取决于日历系统实例的特定参数。
参数:field
- 日历字段。
返回:给定日历字段的最大值。
另请参见:getMinimum(int)
, getGreatestMinimum(int)
, getLeastMaximum(int)
, getActualMinimum(int)
, getActualMaximum(int)
getGreatestMinimum
public abstract int getGreatestMinimum(int field)
返回此 Calendar
实例给定日历字段的最高的最小值。最高的最小值被定义为 getActualMinimum(int)
方法为任何可能时间值返回的最大值。最高的最小值取决于日历系统实例的特定参数。
参数:field
- 日历字段。
返回:给定日历字段的最高的最小值。
另请参见:getMinimum(int)
, getMaximum(int)
, getLeastMaximum(int)
, getActualMinimum(int)
, getActualMaximum(int)
getLeastMaximum
public abstract int getLeastMaximum(int field)
返回此 Calendar
实例给定日历字段的最低的最大值。最低的最大值被定义为 getActualMaximum(int)
方法为任何可能时间值返回的最小值。最低的最大值取决于日历系统实例的特定参数。例如,对于格里高利历系统,Calendar
将为 DAY_OF_MONTH
字段返回 28,因为第 28 天是该日历最短那个月的最后一天,即普通年的二月。
参数:field
- 日历字段。
返回:给定日历字段的最低的最大值。
另请参见:getMinimum(int)
, getMaximum(int)
, getGreatestMinimum(int)
, getActualMinimum(int)
, getActualMaximum(int)
getActualMinimum
public int getActualMinimum(int field)
给定此 Calendar
的时间值,返回指定日历字段可能拥有的最小值。
此方法的默认实现使用了一个迭代算法来确定日历字段的实际最小值。如果可能的话,子类应该使用更有效的实现来重写此方法——在许多情况下,它们只是简单地返回 getMinimum()
。
参数:field
- 日历字段
返回:对于此 Calendar
的时间值而言,给定日历字段的最小值
从以下版本开始:1.2
另请参见:getMinimum(int)
, getMaximum(int)
, getGreatestMinimum(int)
, getLeastMaximum(int)
, getActualMaximum(int)
getActualMaximum
public int getActualMaximum(int field)
给定此 Calendar
的时间值,返回指定日历字段可能拥有的最大值。例如,在某些年份中,MONTH
字段的实际最大值是 12,而在希伯来日历系统的其他年份中,该字段的实际最大值是 13。
此方法的默认实现使用了一个迭代算法来确定日历字段的实际最大值。如果有可能的话,子类应该使用一个更有效的实现来重写此方法。
参数:field
- 日历字段
返回:对于此 Calendar
的时间值而言,给定日历字段的最大值
从以下版本开始:1.2
另请参见:getMinimum(int)
, getMaximum(int)
, getGreatestMinimum(int)
, getLeastMaximum(int)
, getActualMaximum(int)
clone
public Object clone()
创建并返回此对象的一个副本。
返回:此对象的一个副本。
另请参见:Cloneable
toString
public String toString()
返回此日历的字符串表示形式。此方法仅在进行调试的时候使用,不同实现之间所返回的字符串格式可能有所不同。返回的字符串可能为空,但不可能为 null
。
返回:此日历的字符串表示形式。
currentTimeMillis
public static long currentTimeMillis()
返回以毫秒为单位的当前时间。注意,当返回值的时间单位是毫秒时,值的粒度取决于底层操作系统,并且粒度可能更大。例如,许多操作系统以几十毫秒为单位测量时间。
请参阅 Date
类的描述,了解可能发生在“计算机时间”和协调世界时(UTC)之间的细微差异的讨论。
返回:当前时间与协调世界时 1970 年 1 月 1 日午夜之间的时间差(以毫秒为单位测量)。
另请参见:Date
nanoTime
public static long nanoTime()
返回最准确的可用系统计时器的当前值,以毫微秒为单位。
此方法只能用于测量已过的时间,与系统或钟表时间的其他任何时间概念无关。返回值表示从某一固定但任意的时间算起的毫微秒数(或许从以后算起,所以该值可能为负)。此方法提供毫微秒的精度,但不是必要的毫微秒的准确度。它对于值的更改频率没有作出保证。在取值范围大于约 292 年(263 毫微秒)的连续调用的不同点在于:由于数字溢出,将无法准确计算已过的时间。
例如,测试某些代码执行的时间长度:
long startTime = System.nanoTime();
// ... the code being measured ...
long estimatedTime = System.nanoTime() - startTime;
返回:系统计时器的当前值,以毫微秒为单位。
从以下版本开始:1.5