Java中对日期和时间的处理简述

来源:互联网 发布:游戏m美工招聘' 编辑:程序博客网 时间:2024/05/10 05:30

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>

直接已知子类: 

Date,Time, Timestamp

 

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)
若当调用此方法的Date对象在指定日期之后返回true,否则返回false。

2

boolean before(Date date)
若当调用此方法的Date对象在指定日期之前返回true,否则返回false。

3

Object clone( )
返回此对象的副本。

4

int compareTo(Date date)
比较当调用此方法的Date对象和指定日期。两者相等时候返回0。调用对象在指定日期之前则返回负数。调用对象在指定日期之后则返回正数。

5

int compareTo(Object obj)
若obj是Date类型则操作等同于compareTo(Date) 。否则它抛出ClassCastException。

6

boolean equals(Object date)
当调用此方法的Date对象和指定日期相等时候返回true,否则返回false。

7

long getTime( )
返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。

8

int hashCode( )
 返回此对象的哈希码值。

9

void setTime(long time)
 
用自1970年1月1日00:00:00 GMT以后time毫秒数设置时间和日期。

10

String toString( )
转换Date对象为String表示形式,并返回该字符串。

获取当前日期时间

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 类是一个抽象类,它为特定瞬间与一组诸如 YEARMONTHDAY_OF_MONTHHOUR 日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。瞬间可用毫秒值来表示,它是距历元(即格林威治标准时间 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()
在具有默认语言环境的默认时区内使用当前时间构造一个默认的 GregorianCalendar。

2

GregorianCalendar(int year, int month, int date)
在具有默认语言环境的默认时区内构造一个带有给定日期设置的 GregorianCalendar

3

GregorianCalendar(int year, int month, int date, int hour, int minute)
为具有默认语言环境的默认时区构造一个具有给定日期和时间设置的 GregorianCalendar。

4

GregorianCalendar(int year, int month, int date, int hour, int minute, int second)
  为具有默认语言环境的默认时区构造一个具有给定日期和时间设置的 GregorianCalendar。

5

GregorianCalendar(Locale aLocale)
在具有给定语言环境的默认时区内构造一个基于当前时间的 GregorianCalendar。

6

GregorianCalendar(TimeZone zone)
在具有默认语言环境的给定时区内构造一个基于当前时间的 GregorianCalendar。

7

GregorianCalendar(TimeZone zone, Locale aLocale)
 在具有给定语言环境的给定时区内构造一个基于当前时间的 GregorianCalendar。

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

序号

方法和说明

1

void add(int field, int amount)
根据日历规则,将指定的(有符号的)时间量添加到给定的日历字段中。

2

protected void computeFields()
转换UTC毫秒值为时间域值

3

protected void computeTime()
覆盖Calendar ,转换时间域值为UTC毫秒值

4

boolean equals(Object obj)
比较此 GregorianCalendar 与指定的 Object。

5

int get(int field)
获取指定字段的时间值

6

int getActualMaximum(int field)
返回当前日期,给定字段的最大值

7

int getActualMinimum(int field)
返回当前日期,给定字段的最小值

8

int getGreatestMinimum(int field)
 返回此 GregorianCalendar 实例给定日历字段的最高的最小值。

9

Date getGregorianChange()
获得格里高利历的更改日期。

10

int getLeastMaximum(int field)
返回此 GregorianCalendar 实例给定日历字段的最低的最大值

11

int getMaximum(int field)
返回此 GregorianCalendar 实例的给定日历字段的最大值。

12

Date getTime()
获取日历当前时间。

13

long getTimeInMillis()
获取用长整型表示的日历的当前时间

14

TimeZone getTimeZone()
获取时区。

15

int getMinimum(int field)
返回给定字段的最小值。

16

int hashCode()
重写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)
设置 GregorianCalendar 的更改日期。

24

void setTime(Date date)
用给定的日期设置Calendar的当前时间。

25

void setTimeInMillis(long millis)
用给定的long型毫秒数设置Calendar的当前时间。

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 
          指示所有风格名称的 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。


  一下为 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

set(int year, int month, int date, int hourOfDay, int minute) 
          设置日历字段 YEAR、MONTH、DAY_OF_MONTH、HOUR_OF_DAY 和 MINUTE 的值。

 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() 
          返回此日历的字符串表示形式。

 


0 0