1 常用的类
1.1 Calendar
Calendar类主要提供了一个时间值和日历字段的一个对应和转换关系。这个时间值是距
历元(即格林威治标准时间1970年1月1日的00:00:00.000,格里高利历)的偏移量,是个毫秒值。
获取Calendar对象采用getInstance()方法,它使用了默认的时区和语言环境。
查看getInstance的JDK源代码
public static Calendar getInstance()
{
Calendar cal = createCalendar(TimeZone.getDefaultRef(), Locale.getDefault());
cal.sharedZone = true;
return cal;
}
也可以指定时区和语言环境,TimeZone和Locale
Calendar d1 = Calendar.getInstance();
d1.setTimeZone(TimeZone.getTimeZone("GMT+9:00"));
d1.set(Calendar.DAY_OF_MONTH,1);
System.out.println(d1.getTime());
输出为
Tue May 01 14:46:58 GMT+08:00 2007
当前系统时间为
15:46:58
Calendar的clear方法清除日历字段值和时间值
static
Calendar
| |
static
Calendar
| |
static
Calendar
| |
static
Calendar
|
Calendar有两种解释日历字段的模式,即lenient和non-lenient。当Calendar处于lenient 模式时,它可接受比它所生成的日历字段范围更大范围内的值。例如
Calendar的默认模式为lenient。
Calendar d1 = Calendar.getInstance();
d1.set(Calendar.MONTH,13);
当Calendar处于non-lenient模式时,如果其日历字段中存在任何不一致性,它都会抛出一个异常。
Calendar d1 = Calendar.getInstance();
d1.setLenient(false);
d1.set(Calendar.MONTH,13);
程序运行后出现异常:
Exception in thread "main"
java.lang.IllegalArgumentException
: MONTH
at java.util.GregorianCalendar.computeTime(
GregorianCalendar.java:2315
)
at java.util.Calendar.updateTime(
Calendar.java:2260
)
at java.util.Calendar.getTimeInMillis(
Calendar.java:1044
)
at java.util.Calendar.getTime(
Calendar.java:1017
)
at date.CalendarTest.main(
CalendarTest.java:32
)
可以使用三种方法更改日历字段:set()、add() 和 roll()。
set(f, value) 将日历字段 f 更改为 value
add(f, delta) 将 delta 添加到 f 字段中。这等同于调用 set(f, get(f) + delta),但要带以下两个调整:
Add 规则 1。调用后 f 字段的值减去调用前 f 字段的值等于 delta,以字段 f 中发生的任何溢出为模。溢出发生在字段值超出其范围时,结果,下一个更大的字段会递增或递减,并将字段值调整回其范围内。
Add 规则 2。如果期望某一个更小的字段是不变的,但让它等于以前的值是不可能的,因为在字段 f 发生更改之后,或者在出现其他约束之后,比如时区偏移量发生更改,它的最大值和最小值也在发生更改,然后它的值被调整为尽量接近于所期望的值。更小的字段表示一个更小的时间单元。HOUR 是一个比 DAY_OF_MONTH 小的字段。对于不期望是不变字段的更小字段,无需进行任何调整。日历系统会确定期望不变的那些字段。
roll(f, delta) 将 delta 添加到 f 字段中,但不更改更大的字段
下面是从JDK中对Calendar类的构造函数和方法的总结。
构造方法摘要
| |
protected
| |
protected
|
方法摘要
| |
abstract void
|
add根据日历的规则,为给定的日历字段添加或减去指定的时间量。(int field, int amount)
|
boolean
| |
boolean
| |
void
| |
void
| |
int
| |
protected void
| |
protected abstract void
| |
protected abstract void
| |
boolean
| |
int
|
get返回给定日历字段的值。(int field)
|
int
| |
int
| |
static
Locale[]
| |
int
| |
abstract int
| |
static
Calendar
| |
static
Calendar
| |
static
Calendar
| |
static
Calendar
| |
abstract int
|
getLeastMaximum返回此 Calendar 实例给定日历字段的最低的最大值。(int field)
|
abstract int
|
getMaximum返回此 Calendar 实例给定日历字段的最大值。(int field)
|
int
| |
abstract int
|
getMinimum返回此 Calendar 实例给定日历字段的最小值。(int field)
|
long
| |
int
| |
protected int
|
internalGet返回给定日历字段的值。(int field)
|
boolean
| |
boolean
| |
abstract void
|
roll在给定的时间字段上添加或减去(上/下)单个时间单元,不更改更大的字段。(int field, boolean up)
|
void
|
roll向指定日历字段添加指定(有符号的)时间量,不更改更大的字段。(int field, int amount)
|
void
|
set将给定的日历字段设置为给定值。(int field, int value)
|
void
|
set设置日历字段 YEAR、MONTH 和 DAY_OF_MONTH 的值。(int year, int month, int date)
|
void
|
set设置日历字段 YEAR、MONTH、DAY_OF_MONTH、HOUR_OF_DAY 和 MINUTE 的值。(int year, int month, int date, int hourOfDay, int minute)
|
void
|
set设置字段 YEAR、MONTH、DAY_OF_MONTH、HOUR、MINUTE 和 SECOND 的值。(int year, int month, int date, int hourOfDay, int minute, int second)
|
void
| |
void
|
setLenient指定日期/时间解释是否是宽松的。(boolean lenient)
|
void
| |
void
| |
void
|
setTimeInMillis用给定的 long 值设置此 Calendar 的当前时间值。(long millis)
|
void
| |
1.2 Date
Date的构造函数现在只有Date()和Date(long date)使用了,其余4个都已过时不采用了。换作使用Calendar的set方法和GregorianCalendar的构造函数。
Date的方法中用来获取和设置年,月,日,小时,分钟,秒的方法也都被Calendar的get方法所取代。转换成字符串的方法只有toString还在使用。
before、after、clone、equals、compareTo、getTime、setTime。
clone使用在不想破坏原有Date对象的数据。
下面是从JDK中对Date类的构造函数和方法的总结。
Date已过时。 从 JDK 1.1 开始,由 Calendar.set(year + 1900, month, date) 或 GregorianCalendar(year + 1900, month, date) 取代。(int year, int month, int date)
|
Date已过时。 从 JDK 1.1 开始,由 Calendar.set(year + 1900, month, date, hrs, min) 或 GregorianCalendar(year + 1900, month, date, hrs, min) 取代。(int year, int month, int date, int hrs, int min)
|
Date已过时。 从 JDK 1.1 开始,由 Calendar.set(year + 1900, month, date, hrs, min, sec) 或 GregorianCalendar(year + 1900, month, date, hrs, min, sec) 取代。(int year, int month, int date, int hrs, int min, int sec)
|
方法摘要
| |
boolean
| |
boolean
| |
int
| |
boolean
| |
int
| |
int
| |
int
| |
int
| |
int
| |
int
| |
long
| |
int
| |
int
| |
int
| |
static long
| |
void
| |
void
| |
void
| |
void
| |
void
| |
void
| |
void
| |
static long
|
UTC已过时。 从 JDK 1.1 开始,由 Calendar.set(year + 1900, month, date, hrs, min, sec) 或 GregorianCalendar(year + 1900, month, date, hrs, min, sec) 取代,使用 UTC TimeZone,后跟 Calendar.getTime().getTime()。(int year, int month, int date, int hrs, int min, int sec)
|
1.3 SimpleDateFormat
SimpleDateFormat是一个以与语言环境相关的方式来格式化和分析日期的具体类。它允许进行格式化(日期->文本)、分析(文本->日期)和规范化。
例如将一个Date格式化为日期/时间字符串
Date date = new Date();
SimpleDateFormat df = new SimpleDateFormat("GG ww WW DD a yyyy-MM-dd hh:mm:ss zzz ZZZ");
System.out.println(df.format(date));
输出
公元
19 02 129
下午
2007-05-09 04:06:01 GMT+08:00 +0800
从给定字符串的开始分析文本,以生成一个日期
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
try {
date = df.parse("2000-11-23 23:12:00");
} catch (ParseException e) {
e.printStackTrace();
}
System.out.println(date);
输出
Thu Nov 23 23:12:00 GMT+08:00 2000
模式
字母
|
日期或时间元素
|
表示
|
示例
|
G
|
Era
标志符
|
AD
| |
y
|
年
|
1996; 96
| |
M
|
年中的月份
|
July; Jul; 07
| |
w
|
年中的周数
|
27
| |
W
|
月份中的周数
|
2
| |
D
|
年中的天数
|
189
| |
d
|
月份中的天数
|
10
| |
F
|
月份中的星期
|
2
| |
E
|
星期中的天数
|
Tuesday; Tue
| |
a
|
Am/pm
标记
|
PM
| |
H
|
一天中的小时数(
0-23
)
|
0
| |
k
|
一天中的小时数(
1-24
)
|
24
| |
K
|
am/pm
中的小时数(
0-11
)
|
0
| |
h
|
am/pm
中的小时数(
1-12
)
|
12
| |
m
|
小时中的分钟数
|
30
| |
s
|
分钟中的秒数
|
55
| |
S
|
毫秒数
|
978
| |
z
|
时区
|
Pacific Standard Time; PST; GMT-08:00
| |
Z
|
时区
|
-0800
|
1.4 DateFormat
DateFormat 是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并分析日期或时间。日期/时间格式化子类(如 SimpleDateFormat)允许进行格式化(也就是日期 -> 文本)、分析(文本-> 日期)和标准化。将日期表示为 Date 对象,或者表示为从 GMT(格林尼治标准时间)1970 年,1 月 1 日 00:00:00 这一刻开始的毫秒数。
方法摘要
| |
boolean
| |
abstract
StringBuffer
| |
static
Locale[]
| |
static
DateFormat
| |
static
DateFormat
| |
static
DateFormat
| |
static
DateFormat
| |
static
DateFormat
|
getDateTimeInstance获得日期/时间 formatter,该 formatter 具有默认语言环境的给定日期和时间格式化风格。(int dateStyle, int timeStyle)
|
static
DateFormat
|
getDateTimeInstance获得日期/时间 formatter,该 formatter 具有给定语言环境的给定格式化风格。(int dateStyle, int timeStyle,
Locale aLocale)
|
static
DateFormat
| |
static
DateFormat
| |
static
DateFormat
| |
static
DateFormat
| |
int
| |
boolean
| |
abstract
Date
| |
void
| |
void
|
setLenient指定日期/时间分析是否不严格。(boolean lenient)
|
void
| |
void
|
1.5 GregorianCalendar
GregorianCalendar 是 Calendar 的一个具体子类,提供了世界上大多数国家使用的标准日历系统。
构造方法摘要
| |
| |
GregorianCalendar在具有默认语言环境的默认时区内构造一个带有给定日期设置的 GregorianCalendar。(int year, int month, int dayOfMonth)
|
|
GregorianCalendar为具有默认语言环境的默认时区构造一个具有给定日期和时间设置的 GregorianCalendar。(int year, int month, int dayOfMonth, int hourOfDay, int minute)
|
|
GregorianCalendar为具有默认语言环境的默认时区构造一个具有给定日期和时间设置的 GregorianCalendar。(int year, int month, int dayOfMonth, int hourOfDay, int minute, int second)
|
|
| |
| |
|
方法摘要
| |
void
|
add根据日历规则,将指定的(有符号的)时间量添加到给定的日历字段中。(int field, int amount)
|
protected void
| |
protected void
| |
boolean
| |
int
| |
int
| |
int
| |
int
| |
int
| |
int
| |
int
| |
boolean
|
isLeapYear确定给定的年份是否为闰年。(int year)
|
void
|
roll在给定的时间字段上添加或减去(上/下)单个时间单元,不更改更大的字段。(int field, boolean up)
|
void
|
roll向指定日历字段添加有符号的时间量,不更改更大的字段。(int field, int amount)
|
void
| |
void
|