Java 日期时间

java.util 包提供了 Date 类来封装当前的日期和时间。Date 类提供两个构造函数来实例化 Date 对象。

第一个构造函数使用当前日期和时间来初始化对象。

  1. Date()

第二个构造函数接收一个参数,该参数是从1970年1月1日起的毫秒数。

  1. Date(longmillisec)

Date对象创建以后,可以调用下面的方法。

序号方法和描述
1boolean after(Date date)
若当调用此方法的Date对象在指定日期之后返回true,否则返回false。
2boolean before(Date date)
若当调用此方法的Date对象在指定日期之前返回true,否则返回false。
3Object clone( )
返回此对象的副本。
4int compareTo(Date date)
比较当调用此方法的Date对象和指定日期。两者相等时候返回0。调用对象在指定日期之前则返回负数。调用对象在指定日期之后则返回正数。
5int compareTo(Object obj)
若obj是Date类型则操作等同于compareTo(Date) 。否则它抛出ClassCastException。
6boolean equals(Object date)
当调用此方法的Date对象和指定日期相等时候返回true,否则返回false。
7long getTime( )
返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
8int hashCode( )
返回此对象的哈希码值。
9void setTime(long time)
用自1970年1月1日00:00:00 GMT以后time毫秒数设置时间和日期。
10String toString( )
把此 Date 对象转换为以下形式的 String: dow mon dd hh:mm:ss zzz yyyy 其中: dow 是一周中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat)。

获取当前日期时间

Java中获取当前日期和时间很简单,使用 Date 对象的 toString() 方法来打印当前日期和时间,如下所示:

实例

  1. import java.util.Date;
  2. public class DateDemo {
  3. public static void main(String args[]) {
  4. // 初始化 Date 对象
  5. Date date = new Date();
  6. // 使用 toString() 函数显示日期时间
  7. System.out.println(date.toString());
  8. }
  9. }

以上实例编译运行结果如下:

  1. 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 允许你选择任何用户自定义日期时间格式来运行。例如:

实例

  1. import java.util.*;
  2. import java.text.*;
  3. public class DateDemo {
  4. public static void main(String args[]) {
  5. Date dNow = new Date( );
  6. SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd hh:mm:ss");
  7. System.out.println("当前时间为: " + ft.format(dNow));
  8. }
  9. }
  1. SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd hh:mm:ss");

这一行代码确立了转换的格式,其中 yyyy 是完整的公元年,MM 是月份,dd 是日期,HH:mm:ss 是时、分、秒。

注意:有的格式大写,有的格式小写,例如 MM 是月份,mm 是分;HH 是 24 小时制,而 hh 是 12 小时制。

以上实例编译运行结果如下:

  1. 当前时间为: 2018-09-06 10:16:34

日期和时间的格式化编码

时间模式字符串用来指定时间格式。在此模式中,所有的 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
aA.M./P.M. 标记PM
k一天中的小时(1~24)24
K A.M./P.M. (0~11)格式小时10
z时区Eastern Standard Time
'文字定界符Delimiter
"单引号`

使用printf格式化日期

printf 方法可以很轻松地格式化时间和日期。使用两个字母格式,它以 %t 开头并且以下面表格中的一个字母结尾。

转 换 符 说 明 示 例
c 包括全部日期和时间信息 星期六 十月 27 14:21:20 CST 2007
F "年-月-日"格式 2007-10-27
D "月/日/年"格式 10/27/07
r "HH:MM:SS PM"格式(12时制) 02:25:51 下午
T "HH:MM:SS"格式(24时制) 14:28:16
R "HH:MM"格式(24时制) 14:28

更多 printf 解析可以参见:

  1. import java.util.Date;
  2. /**
  3. * 使用printf输出
  4. */
  5. /**关键技术点
  6. * 使用java.io.PrintStream的printf方法实现C风格的输出
  7. * printf 方法的第一个参数为输出的格式,第二个参数是可变长的,表示待输出的数据对象
  8. */
  9. public class Printf {
  10. public static void main(String[] args) {
  11. /*** 输出字符串 ***/
  12. // %s表示输出字符串,也就是将后面的字符串替换模式中的%s
  13. System.out.printf("%s", new Integer(1212));
  14. // %n表示换行
  15. System.out.printf("%s%n", "end line");
  16. // 还可以支持多个参数
  17. System.out.printf("%s = %s%n", "Name", "Zhangsan");
  18. // %S将字符串以大写形式输出
  19. System.out.printf("%S = %s%n", "Name", "Zhangsan");
  20. // 支持多个参数时,可以在%s之间插入变量编号,1$表示第一个字符串,3$表示第3个字符串
  21. System.out.printf("%1$s = %3$s %2$s%n", "Name", "san", "Zhang");
  22. /*** 输出boolean类型 ***/
  23. System.out.printf("true = %b; false = ", true);
  24. System.out.printf("%b%n", false);
  25. /*** 输出整数类型***/
  26. Integer iObj = 342;
  27. // %d表示将整数格式化为10进制整数
  28. System.out.printf("%d; %d; %d%n", -500, 2343L, iObj);
  29. // %o表示将整数格式化为8进制整数
  30. System.out.printf("%o; %o; %o%n", -500, 2343L, iObj);
  31. // %x表示将整数格式化为16进制整数
  32. System.out.printf("%x; %x; %x%n", -500, 2343L, iObj);
  33. // %X表示将整数格式化为16进制整数,并且字母变成大写形式
  34. System.out.printf("%X; %X; %X%n", -500, 2343L, iObj);
  35. /*** 输出浮点类型***/
  36. Double dObj = 45.6d;
  37. // %e表示以科学技术法输出浮点数
  38. System.out.printf("%e; %e; %e%n", -756.403f, 7464.232641d, dObj);
  39. // %E表示以科学技术法输出浮点数,并且为大写形式
  40. System.out.printf("%E; %E; %E%n", -756.403f, 7464.232641d, dObj);
  41. // %f表示以十进制格式化输出浮点数
  42. System.out.printf("%f; %f; %f%n", -756.403f, 7464.232641d, dObj);
  43. // 还可以限制小数点后的位数
  44. System.out.printf("%.1f; %.3f; %f%n", -756.403f, 7464.232641d, dObj);
  45. /*** 输出日期类型***/
  46. // %t表示格式化日期时间类型,%T是时间日期的大写形式,在%t之后用特定的字母表示不同的输出格式
  47. Date date = new Date();
  48. long dataL = date.getTime();
  49. // 格式化年月日
  50. // %t之后用y表示输出日期的年份(2位数的年,如99)
  51. // %t之后用m表示输出日期的月份,%t之后用d表示输出日期的日号
  52. System.out.printf("%1$ty-%1$tm-%1$td; %2$ty-%2$tm-%2$td%n", date, dataL);
  53. // %t之后用Y表示输出日期的年份(4位数的年),
  54. // %t之后用B表示输出日期的月份的完整名, %t之后用b表示输出日期的月份的简称
  55. System.out.printf("%1$tY-%1$tB-%1$td; %2$tY-%2$tb-%2$td%n", date, dataL);
  56. // 以下是常见的日期组合
  57. // %t之后用D表示以 "%tm/%td/%ty"格式化日期
  58. System.out.printf("%1$tD%n", date);
  59. //%t之后用F表示以"%tY-%tm-%td"格式化日期
  60. System.out.printf("%1$tF%n", date);
  61. /*** 输出时间类型***/
  62. // 输出时分秒
  63. // %t之后用H表示输出时间的时(24进制),%t之后用I表示输出时间的时(12进制),
  64. // %t之后用M表示输出时间的分,%t之后用S表示输出时间的秒
  65. System.out.printf("%1$tH:%1$tM:%1$tS; %2$tI:%2$tM:%2$tS%n", date, dataL);
  66. // %t之后用L表示输出时间的秒中的毫秒
  67. System.out.printf("%1$tH:%1$tM:%1$tS %1$tL%n", date);
  68. // %t之后p表示输出时间的上午或下午信息
  69. System.out.printf("%1$tH:%1$tM:%1$tS %1$tL %1$tp%n", date);
  70. // 以下是常见的时间组合
  71. // %t之后用R表示以"%tH:%tM"格式化时间
  72. System.out.printf("%1$tR%n", date);
  73. // %t之后用T表示以"%tH:%tM:%tS"格式化时间
  74. System.out.printf("%1$tT%n", date);
  75. // %t之后用r表示以"%tI:%tM:%tS %Tp"格式化时间
  76. System.out.printf("%1$tr%n", date);
  77. /*** 输出星期***/
  78. // %t之后用A表示得到星期几的全称
  79. System.out.printf("%1$tF %1$tA%n", date);
  80. // %t之后用a表示得到星期几的简称
  81. System.out.printf("%1$tF %1$ta%n", date);
  82. // 输出时间日期的完整信息
  83. System.out.printf("%1$tc%n", date);
  84. }
  85. }
  86. /**
  87. *printf方法中,格式为"%s"表示以字符串的形式输出第二个可变长参数的第一个参数值;
  88. *格式为"%n"表示换行;格式为"%S"表示将字符串以大写形式输出;在"%s"之间用"n$"表示
  89. *输出可变长参数的第n个参数值.格式为"%b"表示以布尔值的形式输出第二个可变长参数
  90. *的第一个参数值.
  91. */
  92. /**
  93. * 格式为"%d"表示以十进制整数形式输出;"%o"表示以八进制形式输出;"%x"表示以十六进制
  94. * 输出;"%X"表示以十六进制输出,并且将字母(A、B、C、D、E、F)换成大写.格式为"%e"表
  95. * 以科学计数法输出浮点数;格式为"%E"表示以科学计数法输出浮点数,而且将e大写;格式为
  96. * "%f"表示以十进制浮点数输出,在"%f"之间加上".n"表示输出时保留小数点后面n位.
  97. */
  98. /**
  99. * 格式为"%t"表示输出时间日期类型."%t"之后用y表示输出日期的二位数的年份(如99)、用m
  100. * 表示输出日期的月份,用d表示输出日期的日号;"%t"之后用Y表示输出日期的四位数的年份
  101. * (如1999)、用B表示输出日期的月份的完整名,用b表示输出日期的月份的简称."%t"之后用D
  102. * 表示以"%tm/%td/%ty"的格式输出日期、用F表示以"%tY-%tm-%td"的格式输出日期.
  103. */
  104. /**
  105. * "%t"之后用H表示输出时间的时(24进制),用I表示输出时间的时(12进制),用M表示输出时间
  106. * 分,用S表示输出时间的秒,用L表示输出时间的秒中的毫秒数、用 p 表示输出时间的是上午还是
  107. * 下午."%t"之后用R表示以"%tH:%tM"的格式输出时间、用T表示以"%tH:%tM:%tS"的格式输出
  108. * 时间、用r表示以"%tI:%tM:%tS %Tp"的格式输出时间.
  109. */
  110. /**
  111. * "%t"之后用A表示输出日期的全称,用a表示输出日期的星期简称.
  112. */

实例

  1. import java.util.Date;
  2. public class DateDemo {
  3. public static void main(String args[]) {
  4. // 初始化 Date 对象
  5. Date date = new Date();
  6. //c的使用
  7. System.out.printf("全部日期和时间信息:%tc%n",date);
  8. //f的使用
  9. System.out.printf("年-月-日格式:%tF%n",date);
  10. //d的使用
  11. System.out.printf("月/日/年格式:%tD%n",date);
  12. //r的使用
  13. System.out.printf("HH:MM:SS PM格式(12时制):%tr%n",date);
  14. //t的使用
  15. System.out.printf("HH:MM:SS格式(24时制):%tT%n",date);
  16. //R的使用
  17. System.out.printf("HH:MM格式(24时制):%tR",date);
  18. }
  19. }

以上实例编译运行结果如下:

  1. 全部日期和时间信息:星期一 九月 10 10:43:36 CST 2012
  2. 年-月-日格式:2012-09-10
  3. 月/日/年格式:09/10/12
  4. HH:MM:SS PM格式(12时制):10:43:36 上午
  5. HH:MM:SS格式(24时制):10:43:36
  6. HH:MM格式(24时制):10:43

如果你需要重复提供日期,那么利用这种方式来格式化它的每一部分就有点复杂了。因此,可以利用一个格式化字符串指出要被格式化的参数的索引。

索引必须紧跟在%后面,而且必须以$结束。例如:

  1. import java.util.Date;
  2. public class DateDemo {
  3. public static void main(String args[]) {
  4. // 初始化 Date 对象
  5. Date date = new Date();
  6. // 使用toString()显示日期和时间
  7. System.out.printf("%1$s %2$tB %2$td, %2$tY",
  8. "Due date:", date);
  9. }
  10. }

以上实例编译运行结果如下:

  1. Due date: February 09, 2014

或者,你可以使用 < 标志。它表明先前被格式化的参数要被再次使用。例如:

  1. import java.util.Date;
  2. public class DateDemo {
  3. public static void main(String args[]) {
  4. // 初始化 Date 对象
  5. Date date = new Date();
  6. // 显示格式化时间
  7. System.out.printf("%s %tB %<te, %<tY", "Due date:", date);
  8. }
  9. }

以上实例编译运行结果如下:

  1. Due date: February 09, 2014

定义日期格式的转换符可以使日期通过指定的转换符生成新字符串。这些日期转换符如下所示:

  1. import java.util.*;
  2. public class DateDemo {
  3. public static void main(String args[]) {
  4. Date date=new Date();
  5. //b的使用,月份简称
  6. String str=String.format(Locale.US,"英文月份简称:%tb",date);
  7. System.out.println(str);
  8. System.out.printf("本地月份简称:%tb%n",date);
  9. //B的使用,月份全称
  10. str=String.format(Locale.US,"英文月份全称:%tB",date);
  11. System.out.println(str);
  12. System.out.printf("本地月份全称:%tB%n",date);
  13. //a的使用,星期简称
  14. str=String.format(Locale.US,"英文星期的简称:%ta",date);
  15. System.out.println(str);
  16. //A的使用,星期全称
  17. System.out.printf("本地星期的简称:%tA%n",date);
  18. //C的使用,年前两位
  19. System.out.printf("年的前两位数字(不足两位前面补0):%tC%n",date);
  20. //y的使用,年后两位
  21. System.out.printf("年的后两位数字(不足两位前面补0):%ty%n",date);
  22. //j的使用,一年的天数
  23. System.out.printf("一年中的天数(即年的第几天):%tj%n",date);
  24. //m的使用,月份
  25. System.out.printf("两位数字的月份(不足两位前面补0):%tm%n",date);
  26. //d的使用,日(二位,不够补零)
  27. System.out.printf("两位数字的日(不足两位前面补0):%td%n",date);
  28. //e的使用,日(一位不补零)
  29. System.out.printf("月份的日(前面不补0):%te",date);
  30. }
  31. }

输出结果为:

  1. 英文月份简称:May
  2. 本地月份简称:五月
  3. 英文月份全称:May
  4. 本地月份全称:五月
  5. 英文星期的简称:Thu
  6. 本地星期的简称:星期四
  7. 年的前两位数字(不足两位前面补0):20
  8. 年的后两位数字(不足两位前面补0):17
  9. 一年中的天数(即年的第几天):124
  10. 两位数字的月份(不足两位前面补0):05
  11. 两位数字的日(不足两位前面补0):04
  12. 月份的日(前面不补0):4

解析字符串为时间

SimpleDateFormat 类有一些附加的方法,特别是parse(),它试图按照给定的SimpleDateFormat 对象的格式化存储来解析字符串。例如:

实例

  1. import java.util.*;
  2. import java.text.*;
  3. public class DateDemo {
  4. public static void main(String args[]) {
  5. SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd");
  6. String input = args.length == 0 ? "1818-11-11" : args[0];
  7. System.out.print(input + " Parses as ");
  8. Date t;
  9. try {
  10. t = ft.parse(input);
  11. System.out.println(t);
  12. } catch (ParseException e) {
  13. System.out.println("Unparseable using " + ft);
  14. }
  15. }
  16. }

以上实例编译运行结果如下:

  1. $ java DateDemo
  2. 1818-11-11 Parses as Wed Nov 11 00:00:00 GMT 1818
  3. $ java DateDemo 2007-12-01
  4. 2007-12-01 Parses as Sat Dec 01 00:00:00 GMT 2007

Java 休眠(sleep)

sleep()使当前线程进入停滞状态(阻塞当前线程),让出CPU的使用、目的是不让当前线程独自霸占该进程所获的CPU资源,以留一定时间给其他线程执行的机会。

你可以让程序休眠一毫秒的时间或者到您的计算机的寿命长的任意段时间。例如,下面的程序会休眠3秒:

实例

  1. import java.util.*;
  2. public class SleepDemo {
  3. public static void main(String args[]) {
  4. try {
  5. System.out.println(new Date( ) + "\n");
  6. Thread.sleep(1000*3); // 休眠3秒
  7. System.out.println(new Date( ) + "\n");
  8. } catch (Exception e) {
  9. System.out.println("Got an exception!");
  10. }
  11. }
  12. }

以上实例编译运行结果如下:

  1. Thu Sep 17 10:20:30 CST 2015
  2.  
  3. Thu Sep 17 10:20:33 CST 2015

测量时间

下面的一个例子表明如何测量时间间隔(以毫秒为单位):

实例

  1. import java.util.*;
  2. public class DiffDemo {
  3. public static void main(String args[]) {
  4. try {
  5. long start = System.currentTimeMillis( );
  6. System.out.println(new Date( ) + "\n");
  7. Thread.sleep(5*60*10);
  8. System.out.println(new Date( ) + "\n");
  9. long end = System.currentTimeMillis( );
  10. long diff = end - start;
  11. System.out.println("Difference is : " + diff);
  12. } catch (Exception e) {
  13. System.out.println("Got an exception!");
  14. }
  15. }
  16. }

以上实例编译运行结果如下:

  1. Fri Jan 08 09:48:47 CST 2016
  2.  
  3. Fri Jan 08 09:48:50 CST 2016
  4.  
  5. Difference is : 3019

Calendar类

我们现在已经能够格式化并创建一个日期对象了,但是我们如何才能设置和获取日期数据的特定部分呢,比如说小时,日,或者分钟? 我们又如何在日期的这些部分加上或者减去值呢? 答案是使用Calendar 类。

Calendar类的功能要比Date类强大很多,而且在实现方式上也比Date类要复杂一些。

Calendar类是一个抽象类,在实际使用时实现特定的子类的对象,创建对象的过程对程序员来说是透明的,只需要使用getInstance方法创建即可。

创建一个代表系统当前日期的Calendar对象

  1. Calendar c = Calendar.getInstance();//默认是当前日期

创建一个指定日期的Calendar对象

使用Calendar类代表特定的时间,需要首先创建一个Calendar的对象,然后再设定该对象中的年月日参数来完成。

  1. //创建一个代表2009年6月12日的Calendar对象
  2. Calendar c1 = Calendar.getInstance();
  3. c1.set(2009, 6 - 1, 12);

Calendar类对象字段类型

Calendar类中用以下这些常量表示不同的意义,jdk内的很多类其实都是采用的这种思想

常量描述
Calendar.YEAR年份
Calendar.MONTH月份
Calendar.DATE日期
Calendar.DAY_OF_MONTH日期,和上面的字段意义完全相同
Calendar.HOUR12小时制的小时
Calendar.HOUR_OF_DAY24小时制的小时
Calendar.MINUTE分钟
Calendar.SECOND
Calendar.DAY_OF_WEEK星期几

Calendar类对象信息的设置

Set设置

如:

  1. Calendar c1 = Calendar.getInstance();

调用:

  1. public final void set(int year,int month,int date)
  1. c1.set(2009, 6 - 1, 12);//把Calendar对象c1的年月日分别设这为:2009、6、12

利用字段类型设置

如果只设定某个字段,例如日期的值,则可以使用如下set方法:

  1. public void set(int field,int value)

把 c1对象代表的日期设置为10号,其它所有的数值会被重新计算

  1. c1.set(Calendar.DATE,10);

把c1对象代表的年份设置为2008年,其他的所有数值会被重新计算

  1. c1.set(Calendar.YEAR,2008);

其他字段属性set的意义以此类推

Add设置

  1. Calendar c1 = Calendar.getInstance();

把c1对象的日期加上10,也就是c1也就表示为10天后的日期,其它所有的数值会被重新计算

  1. c1.add(Calendar.DATE, 10);

把c1对象的日期减去10,也就是c1也就表示为10天前的日期,其它所有的数值会被重新计算

  1. c1.add(Calendar.DATE, -10);

其他字段属性的add的意义以此类推

Calendar类对象信息的获得

  1. Calendar c1 = Calendar.getInstance();
  2. // 获得年份
  3. int year = c1.get(Calendar.YEAR);
  4. // 获得月份
  5. int month = c1.get(Calendar.MONTH) + 1;
  6. // 获得日期
  7. int date = c1.get(Calendar.DATE);
  8. // 获得小时
  9. int hour = c1.get(Calendar.HOUR_OF_DAY);
  10. // 获得分钟
  11. int minute = c1.get(Calendar.MINUTE);
  12. // 获得秒
  13. int second = c1.get(Calendar.SECOND);
  14. // 获得星期几(注意(这个与Date类是不同的):1代表星期日、2代表星期1、3代表星期二,以此类推)
  15. int day = c1.get(Calendar.DAY_OF_WEEK);

GregorianCalendar类

Calendar类实现了公历日历,GregorianCalendar是Calendar类的一个具体实现。

Calendar 的getInstance()方法返回一个默认用当前的语言环境和时区初始化的GregorianCalendar对象。GregorianCalendar定义了两个字段:AD和BC。这是代表公历定义的两个时代。

下面列出GregorianCalendar对象的几个构造方法:

序号构造函数和说明
1GregorianCalendar()
在具有默认语言环境的默认时区内使用当前时间构造一个默认的 GregorianCalendar。
2GregorianCalendar(int year, int month, int date)
在具有默认语言环境的默认时区内构造一个带有给定日期设置的 GregorianCalendar
3GregorianCalendar(int year, int month, int date, int hour, int minute)
为具有默认语言环境的默认时区构造一个具有给定日期和时间设置的 GregorianCalendar。
4GregorianCalendar(int year, int month, int date, int hour, int minute, int second)
为具有默认语言环境的默认时区构造一个具有给定日期和时间设置的 GregorianCalendar。
5GregorianCalendar(Locale aLocale)
在具有给定语言环境的默认时区内构造一个基于当前时间的 GregorianCalendar。
6GregorianCalendar(TimeZone zone)
在具有默认语言环境的给定时区内构造一个基于当前时间的 GregorianCalendar。
7GregorianCalendar(TimeZone zone, Locale aLocale)
在具有给定语言环境的给定时区内构造一个基于当前时间的 GregorianCalendar。

这里是GregorianCalendar 类提供的一些有用的方法列表:

序号方法和说明
1void add(int field, int amount)
根据日历规则,将指定的(有符号的)时间量添加到给定的日历字段中。
2protected void computeFields()
转换UTC毫秒值为时间域值
3protected void computeTime()
覆盖Calendar ,转换时间域值为UTC毫秒值
4boolean equals(Object obj)
比较此 GregorianCalendar 与指定的 Object。
5int get(int field)
获取指定字段的时间值
6int getActualMaximum(int field)
返回当前日期,给定字段的最大值
7int getActualMinimum(int field)
返回当前日期,给定字段的最小值
8int getGreatestMinimum(int field)
返回此 GregorianCalendar 实例给定日历字段的最高的最小值。
9Date getGregorianChange()
获得格里高利历的更改日期。
10int getLeastMaximum(int field)
返回此 GregorianCalendar 实例给定日历字段的最低的最大值
11int getMaximum(int field)
返回此 GregorianCalendar 实例的给定日历字段的最大值。
12Date getTime()
获取日历当前时间。
13long getTimeInMillis()
获取用长整型表示的日历的当前时间
14TimeZone getTimeZone()
获取时区。
15int getMinimum(int field)
返回给定字段的最小值。
16int hashCode()
重写hashCode.
17boolean isLeapYear(int year)
确定给定的年份是否为闰年。
18void roll(int field, boolean up)
在给定的时间字段上添加或减去(上/下)单个时间单元,不更改更大的字段。
19void set(int field, int value)
用给定的值设置时间字段。
20void set(int year, int month, int date)
设置年、月、日的值。
21void set(int year, int month, int date, int hour, int minute)
设置年、月、日、小时、分钟的值。
22void set(int year, int month, int date, int hour, int minute, int second)
设置年、月、日、小时、分钟、秒的值。
23void setGregorianChange(Date date)
设置 GregorianCalendar 的更改日期。
24void setTime(Date date)
用给定的日期设置Calendar的当前时间。
25void setTimeInMillis(long millis)
用给定的long型毫秒数设置Calendar的当前时间。
26void setTimeZone(TimeZone value)
用给定时区值设置当前时区。
27String toString()
返回代表日历的字符串。

实例

  1. import java.util.*;
  2. public class GregorianCalendarDemo {
  3. public static void main(String args[]) {
  4. String months[] = {
  5. "Jan", "Feb", "Mar", "Apr",
  6. "May", "Jun", "Jul", "Aug",
  7. "Sep", "Oct", "Nov", "Dec"};
  8. int year;
  9. // 初始化 Gregorian 日历
  10. // 使用当前时间和日期
  11. // 默认为本地时间和时区
  12. GregorianCalendar gcalendar = new GregorianCalendar();
  13. // 显示当前时间和日期的信息
  14. System.out.print("Date: ");
  15. System.out.print(months[gcalendar.get(Calendar.MONTH)]);
  16. System.out.print(" " + gcalendar.get(Calendar.DATE) + " ");
  17. System.out.println(year = gcalendar.get(Calendar.YEAR));
  18. System.out.print("Time: ");
  19. System.out.print(gcalendar.get(Calendar.HOUR) + ":");
  20. System.out.print(gcalendar.get(Calendar.MINUTE) + ":");
  21. System.out.println(gcalendar.get(Calendar.SECOND));
  22. // 测试当前年份是否为闰年
  23. if(gcalendar.isLeapYear(year)) {
  24. System.out.println("当前年份是闰年");
  25. }
  26. else {
  27. System.out.println("当前年份不是闰年");
  28. }
  29. }
  30. }

以上实例编译运行结果如下:

  1. Date: Apr 22 2009
  2. Time: 11:25:27
  3. 当前年份不是闰年

关于 Calender 类的完整列表,你可以参考标准的 Java文档