Date类简述
java语言中的date类介绍及使用在JDK1.0中,Date类是唯一的一个代表时间的类,但是由于Date类不便于实现国际化,所以从JDK1.1版本开始,推荐使用Calendar类进行时间和日期处理。这里简单介绍一下Date类和Calendar类的使用。
类 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 同步,但没有 针对闰秒进行调整。
在类 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 日的相同含义。
所有已实现的接口:
Serializable, Cloneable, Comparable<Date>
直接已知子类:
1、使用Date类代表当前系统时间
Date d = new Date();
System.out.println(d);
使用Date类的默认构造方法创建出的对象就代表当前时间,由于Date类覆盖了toString方法,所以可以直接输出Date类型的对象,显示的结果如下:
Sun Mar 08 16:35:58 CST 2009
在该格式中,Sun代表Sunday(周日),Mar代表March(三月),08代表8号,CST代表China Standard
Time(中国标准时间,也就是北京时间(东八区))。
2、使用Date类代表指定的时间
Date d1 = new Date(2009-1900,3-1,9);
System.out.println(d1);
使用带参数的构造方法,可以构造指定日期的Date类对象,Date类中年份的参数应该是实际需要代表的年份减去1900,实际需要代表的月份减去1以后的值。例如上面的示例代码代表就是2009年3月9号。
实际代表具体的年月日时分秒的日期对象,和这个类似。
3、获得Date对象中的信息
Date d2 = new Date();//年份
int year = d2.getYear() + 1900;//月份
int month = d2.getMonth() + 1;//日期
int date = d2.getDate();//小时
int hour = d2.getHours();//分钟
int minute = d2.getMinutes();//秒
int second = d2.getSeconds();//星期几
int day = d2.getDay();
System.out.println("年份:" + year);
System.out.println("月份:" + month);
System.out.println("日期:" + date);
System.out.println("小时:" + hour);
System.out.println("分钟:" + minute);
System.out.println("秒:" + second);
System.out.println("星期:" + day);
使用Date类中对应的get方法,可以获得Date类对象中相关的信息,需要注意的是使用getYear获得是Date对象中年份减去1900以后的值,所以需要显示对应的年份则需要在返回值的基础上加上1900,月份类似。在Date类中还提供了getDay方法,用于获得Date对象代表的时间是星期几,Date类规定周日是0,周一是1,周二是2,后续的依次类推。
4、Date对象和相对时间之间的互转
Date d3 = new Date(2009-1900,3-1,10);
long time = 1290876532190L;//将Date类的对象转换为相对时间
long t = d3.getTime();
System.out.println(t);//将相对时间转换为Date类的对象
Date d4 = new Date(time);
System.out.println(d4);
使用Date对象中的getTime方法,可以将Date类的对象转换为相对时间,使用Date类的构造方法,可以将相对时间转换为Date类的对象。经过转换以后,既方便了时间的计算,也使时间显示比较直观了。
Date对象创建以后,可以调用下面的方法。
序号 |
方法和描述 |
1 |
boolean after(Date date) |
2 |
boolean before(Date date) |
3 |
Object clone( ) |
4 |
int compareTo(Date date) |
5 |
int compareTo(Object obj) |
6 |
boolean equals(Object date) |
7 |
long getTime( ) |
8 |
int hashCode( ) |
9 |
void setTime(long time) |
10 |
String toString( ) |
获取当前日期时间
Java中获取当前日期和时间很简单,使用 Date 对象的 toString() 方法来打印当前日期和时间,如下所示:
实例
import java.util.Date;
public class DateDemo {
public static void main(String args[]) {
// 初始化 Date 对象
Date date = new Date();
// 使用 toString() 函数显示日期时间 System.out.println(date.toString());
}
}
以上实例编译运行结果如下:
Mon May 04 09:51:52 CDT 2013
日期比较
Java使用以下三种方法来比较两个日期:
· 使用 getTime() 方法获取两个日期(自1970年1月1日经历的毫秒数值),然后比较这两个值。
· 使用方法 before(),after() 和 equals()。例如,一个月的12号比18号早,则 new Date(99, 2, 12).before(new Date (99, 2, 18)) 返回true。
· 使用 compareTo() 方法,它是由 Comparable 接口定义的,Date 类实现了这个接口。
使用 SimpleDateFormat 格式化日期
SimpleDateFormat 是一个以语言环境敏感的方式来格式化和分析日期的类。SimpleDateFormat 允许你选择任何用户自定义日期时间格式来运行。例如:
实例
import java.util.*;
import java.text.*;
public class DateDemo {
public static void main(String args[]) {
Date dNow = new Date( );
SimpleDateFormat ft = new SimpleDateFormat ("E yyyy.MM.dd 'at' hh:mm:ss a zzz");
System.out.println("Current Date: " + ft.format(dNow)); } }
以上实例编译运行结果如下:
Current Date: Sun 2004.07.18 at 04:14:09 PM PDT
简单的 DateFormat 格式化编码
时间模式字符串用来指定时间格式。在此模式中,所有的 ASCII 字母被保留为模式字母,定义如下:
字母 |
描述 |
示例 |
G |
纪元标记 |
AD |
y |
四位年份 |
2001 |
M |
月份 |
July or 07 |
d |
一个月的日期 |
10 |
h |
A.M./P.M. (1~12)格式小时 |
12 |
H |
一天中的小时 (0~23) |
22 |
m |
分钟数 |
30 |
s |
秒数 |
55 |
S |
毫秒数 |
234 |
E |
星期几 |
Tuesday |
D |
一年中的日子 |
360 |
F |
一个月中第几周的周几 |
2 (second Wed. in July) |
w |
一年中第几周 |
40 |
W |
一个月中第几周 |
1 |
a |
A.M./P.M. 标记 |
PM |
k |
一天中的小时(1~24) |
24 |
K |
A.M./P.M. (0~11)格式小时 |
10 |
z |
时区 |
Eastern Standard Time |
' |
文字定界符 |
Delimiter |
" |
单引号 |
` |
使用printf格式化日期
printf方法可以很轻松地格式化时间和日期。使用两个字母格式,它以t开头并且以下面表格中的一个字母结尾。例如:
实例
import java.util.Date;
public class DateDemo {
public static void main(String args[]) {
// 初始化 Date 对象
Date date = new Date();
// 使用toString()显示日期和时间
String str = String.format("Current Date/Time : %tc", date ); System.out.printf(str);
}
}
以上实例编译运行结果如下:
Current Date/Time : Sat Dec 15 16:37:57 MST 2012
如果你需要重复提供日期,那么利用这种方式来格式化它的每一部分就有点复杂了。因此,可以利用一个格式化字符串指出要被格式化的参数的索引。
索引必须紧跟在%后面,而且必须以$结束。例如:
实例
import java.util.Date;
public class DateDemo {
public static void main(String args[]) {
// 初始化 Date 对象
Date date = new Date();
// 使用toString()显示日期和时间 System.out.printf("%1$s %2$tB %2$td, %2$tY", "Due date:", date);
}
}
以上实例编译运行结果如下:
Due date: February 09, 2004
或者,你可以使用 < 标志。它表明先前被格式化的参数要被再次使用。例如:
实例
import java.util.Date;
public class DateDemo {
public static void main(String args[]) {
// 初始化 Date 对象
Date date = new Date();
// 显示格式化时间
System.out.printf("%s %tB %<te, %<tY", "Due date:", date);
}
}
以上实例编译运行结果如下:
Due date: February 09, 2004
日期和时间转换字符
字符 |
描述 |
例子 |
c |
完整的日期和时间 |
Mon May 04 09:51:52 CDT 2009 |
F |
ISO 8601 格式日期 |
2004-02-09 |
D |
U.S. 格式日期 (月/日/年) |
02/09/2004 |
T |
24小时时间 |
18:05:19 |
r |
12小时时间 |
06:05:19 pm |
R |
24小时时间,不包含秒 |
18:05 |
Y |
4位年份(包含前导0) |
2004 |
y |
年份后2位(包含前导0) |
04 |
C |
年份前2位(包含前导0) |
20 |
B |
月份全称 |
February |
b |
月份简称 |
Feb |
m |
2位月份(包含前导0) |
02 |
d |
2位日子(包含前导0) |
03 |
e |
2位日子(不包含前导0) |
9 |
A |
星期全称 |
Monday |
a |
星期简称 |
Mon |
j |
3位年份(包含前导0) |
069 |
H |
2位小时(包含前导0), 00 到 23 |
18 |
k |
2位小时(不包含前导0), 0 到 23 |
18 |
I |
2位小时(包含前导0), 01 到 12 |
06 |
l |
2位小时(不包含前导0), 1 到 12 |
6 |
M |
2位分钟(包含前导0) |
05 |
S |
2位秒数(包含前导0) |
19 |
L |
3位毫秒(包含前导0) |
047 |
N |
9位纳秒(包含前导0) |
047000000 |
P |
大写上下午标志 |
PM |
p |
小写上下午标志 |
pm |
z |
从GMT的RFC 822数字偏移 |
-0800 |
Z |
时区 |
PST |
s |
自 1970-01-01 00:00:00 GMT的秒数 |
1078884319 |
Q |
自 1970-01-01 00:00:00 GMT的毫妙 |
1078884319047 |
还有其他有用的日期和时间相关的类。对于更多的细节,你可以参考到Java标准文档。
解析字符串为时间
SimpleDateFormat 类有一些附加的方法,特别是parse(),它试图按照给定的SimpleDateFormat 对象的格式化存储来解析字符串。例如:
实例
import java.util.*;
import java.text.*;
public class DateDemo {
public static void main(String args[]) {
SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd");
String input = args.length == 0 ? "1818-11-11" : args[0]; System.out.print(input + " Parses as ");
Date t;
try { t = ft.parse(input);
System.out.println(t);
} catch (ParseException e) {
System.out.println("Unparseable using " + ft);
}
}
}
以上实例编译运行结果如下:
$ java DateDemo1818-11-11 Parses as Wed Nov 11 00:00:00 GMT 1818
$ java DateDemo 2007-12-012007-12-01 Parses as Sat Dec 01 00:00:00 GMT 2007
Java 休眠(sleep)
sleep()使当前线程进入停滞状态(阻塞当前线程),让出CPU的使用、目的是不让当前线程独自霸占该进程所获的CPU资源,以留一定时间给其他线程执行的机会。
你可以让程序休眠一毫秒的时间或者到您的计算机的寿命长的任意段时间。例如,下面的程序会休眠3秒:
实例
import java.util.*;
public class SleepDemo {
public static void main(String args[]) {
try { System.out.println(new Date( ) + "\n");
Thread.sleep(1000*3);
// 休眠3秒
System.out.println(new Date( ) + "\n");
} catch (Exception e) {
System.out.println("Got an exception!");
}
}
}
以上实例编译运行结果如下:
Thu Sep 17 10:20:30 CST 2015
Thu Sep 17 10:20:33 CST 2015
测量时间
下面的一个例子表明如何测量时间间隔(以毫秒为单位):
实例
import java.util.*;
public class DiffDemo { public static void main(String args[]) {
try {
long start = System.currentTimeMillis( );
System.out.println(new Date( ) + "\n");
Thread.sleep(5*60*10);
System.out.println(new Date( ) + "\n");
long end = System.currentTimeMillis( );
long diff = end - start;
System.out.println("Difference is : " + diff);
} catch (Exception e) {
System.out.println("Got an exception!");
}
}
}
以上实例编译运行结果如下:
Fri Jan 08 09:48:47 CST 2016
Fri Jan 08 09:48:50 CST 2016
Difference is : 3019
Calendar类简述
我们现在已经能够格式化并创建一个日期对象了,但是我们如何才能设置和获取日期数据的特定部分呢,比如说小时,日,或者分钟? 我们又如何在日期的这些部分加上或者减去值呢? 答案是使用Calendar 类。
Calendar类的功能要比Date类强大很多,而且在实现方式上也比Date类要复杂一些。
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)定义的。有关此内容的细节,请参阅每个字段的文档和子类文档。
Calendar类作为一个抽象类,在实际使用时实现特定的子类的对象,创建对象的过程对程序员来说是透明的,只需要使用getInstance方法创建即可。
创建一个代表系统当前日期的Calendar对象
Calendar c = Calendar.getInstance();//默认是当前日期
创建一个指定日期的Calendar对象
使用Calendar类代表特定的时间,需要首先创建一个Calendar的对象,然后再设定该对象中的年月日参数来完成。
//创建一个代表2009年6月12日的Calendar对象Calendar c1 = Calendar.getInstance();
c1.set(2009, 6 - 1, 12);
Calendar类对象字段类型
Calendar类中用一下这些常量表示不同的意义,jdk内的很多类其实都是采用的这种思想
常量 |
描述 |
Calendar.YEAR |
年份 |
Calendar.MONTH |
月份 |
Calendar.DATE |
日期 |
Calendar.DAY_OF_MONTH |
日期,和上面的字段意义完全相同 |
Calendar.HOUR |
12小时制的小时 |
Calendar.HOUR_OF_DAY |
24小时制的小时 |
Calendar.MINUTE |
分钟 |
Calendar.SECOND |
秒 |
Calendar.DAY_OF_WEEK |
星期几 |
Calendar类对象信息的设置
Set设置
如:
Calendar c1 = Calendar.getInstance();
调用:
public final void set(int year,int month,int date)
c1.set(2009, 6 - 1, 12);//把Calendar对象c1的年月日分别设这为:2009、6、12
利用字段类型设置
如果只设定某个字段,例如日期的值,则可以使用如下set方法:
public void set(int field,int value)
把 c1对象代表的日期设置为10号,其它所有的数值会被重新计算
c1.set(Calendar.DATE,10);
把c1对象代表的年份设置为2008年,其他的所有数值会被重新计算
c1.set(Calendar.YEAR,2008);
其他字段属性set的意义以此类推
Add设置
Calendar c1 = Calendar.getInstance();
把c1对象的日期加上10,也就是c1也就表示为10天后的日期,其它所有的数值会被重新计算
c1.add(Calendar.DATE, 10);
把c1对象的日期减去10,也就是c1也就表示为10天前的日期,其它所有的数值会被重新计算
c1.add(Calendar.DATE, -10);
其他字段属性的add的意义以此类推
Calendar类对象信息的获得
Calendar c1 = Calendar.getInstance();
// 获得年份
int year = c1.get(Calendar.YEAR);
// 获得月份
int month = c1.get(Calendar.MONTH) + 1;
// 获得日期
int date = c1.get(Calendar.DATE);
// 获得小时
int hour = c1.get(Calendar.HOUR_OF_DAY);
// 获得分钟
int minute = c1.get(Calendar.MINUTE);
// 获得秒
int second = c1.get(Calendar.SECOND);
// 获得星期几(注意(这个与Date类是不同的):1代表星期日、2代表星期1、3代表星期二,以此类推)
int day = c1.get(Calendar.DAY_OF_WEEK);
实例
package TEST;
import java.util.Date;
import java.text.SimpleDateFormat;
import java.text.DateFormat;
import java.text.ParseException;
import java.util.Calendar;
public class Test {
public Test() {
}
public static void main(String[] args) {
// 字符串转换日期格式
// DateFormat fmtDateTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// 接收传入参数
// String strDate = args[1];
// 得到日期格式对象
// Date date = fmtDateTime.parse(strDate);
// 完整显示今天日期时间
String str= (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS")).format(new Date());
System.out.println(str);
// 创建 Calendar 对象
Calendar calendar = Calendar.getInstance();
try {
// 对 calendar 设置时间的方法
// 设置传入的时间格式
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-M-d H:m:s");
// 指定一个日期
Date date = dateFormat.parse("2013-6-1 13:24:16");//解析字符串 将字符串格式转化成Date类型
// 对 calendar 设置为 date 所定的日期
calendar.setTime(date);
// 按特定格式显示刚设置的时间
str = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS")).format(calendar.getTime());
System.out.println(str);
} catch (ParseException e) {
e.printStackTrace();
}
// 或者另一種設置 calendar 方式
// 分別爲 year, month, date, hourOfDay, minute, second
calendar = Calendar.getInstance();
calendar.set(2013, 1, 2, 17, 35, 44);
str = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS")).format(calendar.getTime());
System.out.println(str);
// Calendar 取得当前时间的方法
// 初始化 (重置) Calendar 对象
calendar = Calendar.getInstance();
// 或者用 Date 来初始化 Calendar 对象
calendar.setTime(new Date());
// setTime 类似上面一行
// Date date = new Date();
// calendar.setTime(date);
str = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS")).format(calendar.getTime());
System.out.println(str);
// 显示年份
int year = calendar.get(Calendar.YEAR);
System.out.println("year is = " + String.valueOf(year));
// 显示月份 (从0开始, 实际显示要加一)
int month = calendar.get(Calendar.MONTH);
System.out.println("nth is = " + (month + 1));
// 本周几
int week = calendar.get(Calendar.DAY_OF_WEEK);
System.out.println("week is = " + week);
// 今年的第 N 天
int DAY_OF_YEAR = calendar.get(Calendar.DAY_OF_YEAR);
System.out.println("DAY_OF_YEAR is = " + DAY_OF_YEAR);
// 本月第 N 天
int DAY_OF_MONTH = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println("DAY_OF_MONTH = " + String.valueOf(DAY_OF_MONTH));
// 3小时以后
calendar.add(Calendar.HOUR_OF_DAY, 3);
int HOUR_OF_DAY = calendar.get(Calendar.HOUR_OF_DAY);
System.out.println("HOUR_OF_DAY + 3 = " + HOUR_OF_DAY);
// 当前分钟数
int MINUTE = calendar.get(Calendar.MINUTE);
System.out.println("MINUTE = " + MINUTE);
// 15 分钟以后
calendar.add(Calendar.MINUTE, 15);
MINUTE = calendar.get(Calendar.MINUTE);
System.out.println("MINUTE + 15 = " + MINUTE);
// 30分钟前
calendar.add(Calendar.MINUTE, -30);
MINUTE = calendar.get(Calendar.MINUTE);
System.out.println("MINUTE - 30 = " + MINUTE);
// 格式化显示
str = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SS")).format(calendar.getTime());
System.out.println(str);
// 重置 Calendar 显示当前时间
calendar.setTime(new Date());
str = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SS")).format(calendar.getTime());
System.out.println(str);
// 创建一个 Calendar 用于比较时间
Calendar calendarNew = Calendar.getInstance();
// 设定为 5 小时以前,后者大,显示 -1
calendarNew.add(Calendar.HOUR, -5);
System.out.println("时间比较:" + calendarNew.compareTo(calendar));
// 设定7小时以后,前者大,显示 1
calendarNew.add(Calendar.HOUR, +7);
System.out.println("时间比较:" + calendarNew.compareTo(calendar));
// 退回 2 小时,时间相同,显示 0
calendarNew.add(Calendar.HOUR, -2);
System.out.println("时间比较:" + calendarNew.compareTo(calendar));
}
}
GregorianCalendar类
Calendar类实现了公历日历,GregorianCalendar是Calendar类的一个具体实现。
Calendar 的getInstance()方法返回一个默认用当前的语言环境和时区初始化的GregorianCalendar对象。GregorianCalendar定义了两个字段:AD和BC。这些代表公历定义的两个时代。
下面列出GregorianCalendar对象的几个构造方法:
序号 |
构造函数和说明 |
1 |
GregorianCalendar() |
2 |
GregorianCalendar(int year, int month, int date) |
3 |
GregorianCalendar(int year, int month, int date, int hour, int minute) |
4 |
GregorianCalendar(int year, int month, int date, int hour, int minute, int second) |
5 |
GregorianCalendar(Locale aLocale) |
6 |
GregorianCalendar(TimeZone zone) |
7 |
GregorianCalendar(TimeZone zone, Locale aLocale) |
这里是GregorianCalendar 类提供的一些有用的方法列表:
序号 |
方法和说明 |
1 |
void add(int field, int amount) |
2 |
protected void computeFields() |
3 |
protected void computeTime() |
4 |
boolean equals(Object obj) |
5 |
int get(int field) |
6 |
int getActualMaximum(int field) |
7 |
int getActualMinimum(int field) |
8 |
int getGreatestMinimum(int field) |
9 |
Date getGregorianChange() |
10 |
int getLeastMaximum(int field) |
11 |
int getMaximum(int field) |
12 |
Date getTime() |
13 |
long getTimeInMillis() |
14 |
TimeZone getTimeZone() |
15 |
int getMinimum(int field) |
16 |
int hashCode() |
17 |
boolean isLeapYear(int year) |
18 |
void roll(int field, boolean up) |
19 |
void set(int field, int value) |
20 |
void set(int year, int month, int date) |
21 |
void set(int year, int month, int date, int hour, int minute) |
22 |
void set(int year, int month, int date, int hour, int minute, int second) |
23 |
void setGregorianChange(Date date) |
24 |
void setTime(Date date) |
25 |
void setTimeInMillis(long millis) |
26 |
void setTimeZone(TimeZone value) |
27 |
String toString() |
实例
import java.util.*;
public class GregorianCalendarDemo {
public static void main(String args[]) {
String months[] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
int year;
// 初始化 Gregorian 日历
// 使用当前时间和日期
// 默认为本地时间和时区
GregorianCalendar gcalendar = new GregorianCalendar();
// 显示当前时间和日期的信息
System.out.print("Date: "); System.out.print(months[gcalendar.get(Calendar.MONTH)]); System.out.print(" " + gcalendar.get(Calendar.DATE) + " "); System.out.println(year = gcalendar.get(Calendar.YEAR)); System.out.print("Time: ");
System.out.print(gcalendar.get(Calendar.HOUR) + ":"); System.out.print(gcalendar.get(Calendar.MINUTE) + ":"); System.out.println(gcalendar.get(Calendar.SECOND));
// 测试当前年份是否为闰年
if(gcalendar.isLeapYear(year)){
System.out.println("当前年份是闰年");
} else {
System.out.println("当前年份不是闰年");
}
}
}
以上实例编译运行结果如下:
Date: Apr 22 2009Time: 11:25:27当前年份不是闰年
以下是calendar的一些常量:
static int |
ALL_STYLES |
static int |
|
static int |
AM_PM |
static int |
|
protected boolean |
areFieldsSet |
static int |
|
static int |
DATE |
static int |
DAY_OF_MONTH |
static int |
DAY_OF_WEEK |
static int |
DAY_OF_WEEK_IN_MONTH |
static int |
DAY_OF_YEAR |
static int |
|
static int |
DST_OFFSET |
static int |
ERA |
static int |
|
static int |
FIELD_COUNT |
protected int[] |
fields |
static int |
FRIDAY |
static int |
HOUR |
static int |
HOUR_OF_DAY |
protected boolean[] |
isSet |
protected boolean |
isTimeSet |
static int |
|
static int |
|
static int |
|
static int |
LONG |
static int |
|
static int |
|
static int |
MILLISECOND |
static int |
MINUTE |
static int |
MONDAY |
static int |
MONTH |
static int |
|
static int |
|
static int |
|
static int |
SATURDAY |
static int |
SECOND |
static int |
|
static int |
SHORT |
static int |
SUNDAY |
static int |
THURSDAY |
protected long |
time |
static int |
TUESDAY |
static int |
UNDECIMBER |
static int |
WEDNESDAY |
static int |
WEEK_OF_MONTH |
static int |
WEEK_OF_YEAR |
static int |
YEAR |
static int |
ZONE_OFFSET |
构造方法:
protected |
Calendar() |
protected |
Calendar(TimeZone zone, Locale aLocale) |
一下为 Calendar类中的一些方法:
abstract void |
add(int field, int amount) |
boolean |
after(Object when) |
boolean |
before(Object when) |
void |
|
void |
clear(int field) |
clone() |
|
int |
compareTo(Calendar anotherCalendar) |
protected void |
complete() |
protected abstract void |
computeFields() |
protected abstract void |
computeTime() |
boolean |
|
int |
get(int field) |
int |
getActualMaximum(int field) |
int |
getActualMinimum(int field) |
static Locale[] |
getAvailableLocales() |
getDisplayName(int field, int style, Locale locale) |
|
getDisplayNames(int field, int style, Locale locale) |
|
int |
getFirstDayOfWeek() |
abstract int |
getGreatestMinimum(int field) |
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) |
abstract int |
getMaximum(int field) |
int |
getMinimalDaysInFirstWeek() |
abstract int |
getMinimum(int field) |
long |
getTimeInMillis() |
getTimeZone() |
|
int |
hashCode() |
protected int |
internalGet(int field) |
boolean |
isLenient() |
boolean |
isSet(int field) |
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) |
void |
set(int year, int month, int date, int hourOfDay, int minute) |
void |
set(int year, int month, int date, int hourOfDay, int minute, int second) |
void |
setFirstDayOfWeek(int value) |
void |
setLenient(boolean lenient) |
void |
setMinimalDaysInFirstWeek(int value) |
void |
|
void |
setTimeInMillis(long millis) |
void |
setTimeZone(TimeZone value) |
toString() |