JAVA面试题解惑系列七日期和时间的处理.docx

上传人:b****8 文档编号:10328353 上传时间:2023-02-10 格式:DOCX 页数:29 大小:22.93KB
下载 相关 举报
JAVA面试题解惑系列七日期和时间的处理.docx_第1页
第1页 / 共29页
JAVA面试题解惑系列七日期和时间的处理.docx_第2页
第2页 / 共29页
JAVA面试题解惑系列七日期和时间的处理.docx_第3页
第3页 / 共29页
JAVA面试题解惑系列七日期和时间的处理.docx_第4页
第4页 / 共29页
JAVA面试题解惑系列七日期和时间的处理.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

JAVA面试题解惑系列七日期和时间的处理.docx

《JAVA面试题解惑系列七日期和时间的处理.docx》由会员分享,可在线阅读,更多相关《JAVA面试题解惑系列七日期和时间的处理.docx(29页珍藏版)》请在冰豆网上搜索。

JAVA面试题解惑系列七日期和时间的处理.docx

JAVA面试题解惑系列七日期和时间的处理

JAVA面试题解惑系列(七)——日期和时间的处理

日期和时间的处理不仅在面试题中会考到,在实际项目开发中也是我们经常需要处理的问题,似乎没有哪个项目可以避开它们,我们常常在处理用户的出生年月日、注册日期,订单的创建时间等属性时用到,由此可见其重要性。

提到日期和时间,我想大家最先想到应该是类吧。

Date类可以精确到毫秒数,这个毫秒数是相对于格林威治标准时间“1970-01-0100:

00:

GMT”的差值。

那么,什么是格林威治标准时间呢要回答这个问题,我们需要先来了解一下世界时间标准方面的知识。

世界时间标准主要有UTC,即CoordinatedUniversalTime(中文名译作世界协调时间、世界统一时间或世界标准时间),以及GMT,即GreenwichMeanTime(中文名译作格林威治标准时间或格林威治平均时间)两种。

严格来讲,UTC比GMT更加精确一些,不过它们的差值不会超过秒,如果超过了,将会为UTC增加闰秒以与GMT,也就是地球自转周期保持一致。

所以在日常使用中,我们可以把UTC和GMT一样看待。

日期和时间的表示是与我们所处的时区相关联的,如果我们不指定时区,那么它们将以系统默认的时区来显示。

我们先来看看如何创建日期对象。

Date类有很多个构造器方法,大部分已经不被赞成使用了(Deprecated),不过还剩下两个可以使用的:

Java代码

1.publicDate(){

2.this());

3.}

4.

5.publicDate(longdate){

1.rint("比较结果:

\"1900-01-01 20:

00:

00\"在\"2008-08-08 20:

00:

00\"");  

2.        rint("比较结果:

\"2008-08-08 20:

00:

00\"在\"1900-01-01 20:

00:

00\"");  

3.        rint("比较结果:

\"1900-01-01 20:

00:

00\"在\"2008-08-08 20:

00:

00\"");  

        rint("比较结果:

\"1900-01-0120:

00:

00\"在\"2008-08-0820:

00:

00\"");

rint("比较结果:

\"2008-08-0820:

00:

00\"在\"1900-01-0120:

00:

00\"");

rint("比较结果:

\"1900-01-0120:

00:

00\"在\"2008-08-0820:

00:

00\"");

//使用compareTo()方法比较

inti=(d2008);

if(i==-1){

"之前");

}elseif(i==1){

"之后");

}elseif(i==0){

"是同一时刻");

}

}

}

运行结果:

1.调用方法:

(d2008)

2.比较结果:

"1900-01-0120:

00:

00"在"2008-08-0820:

00:

00"之前

3.

4.调用方法:

(d1900)

5.比较结果:

"2008-08-0820:

00:

00"在"1900-01-0120:

00:

00"之后

6.

7.调用方法:

(d2008)

8.比较结果:

"1900-01-0120:

00:

00"在"2008-08-0820:

00:

00"之前

那么如果我们想直接获取或者改变年、月、日、时、分、秒等等这些属性的值时怎么办呢Date类当然有完成这些操作的方法,不过遗憾的是它们也都已经不被赞成使用了。

我们必须换一个能够提供这些操作的类,这个类就是。

公历历法

Calendar是一个抽象类,我们无法直接实例化它,它有一个具体子类实体类,这个类实现的就是我们日常所用的公历历法,或者叫做阳历。

我们可以直接使用new命令创建它的实例,或者使用Calendar类的这个方法来获得它实例:

Java代码

1.public static Calendar getInstance(){  

2.    //other code  

3.}  

publicstaticCalendargetInstance(){

//othercode

}

采用上面这个方法时,我们创建的Calendar对象的日期和时间值是对象被创建时系统日期和时间值。

当使用new命令时,我们有两种选择,一种是使用系统当前的日期和时间值初始化GregorianCalendar对象;另一种是通过给定年、月、日、时、分、秒等属性值来对其进行初始化。

请看下面的例子:

Java代码

1.import   

2.import   

3.import   

4.import   

5.  

6.public class DateTest {  

7.    /** 

8.     * 以一种较为友好的方式格式化日期时间值 

9.     *  

10.     * @param c 

11.     *            日期时间对象 

12.     * @return 格式化后的日期时间字符串 

13.     */  

14.    public static String toFriendlyString(Calendar c) {  

15.        if (c !

= null) {  

16.            DateFormat df = new SimpleDateFormat("yyyy年MM月dd日 HH:

mm:

ss");  

17.            return ());  

18.        }  

19.        return null;  

20.    }  

21.  

22.    public static void main(String[] args) {  

23.        Calendar c1 = ();  

24.        "创建方式:

()");  

25.        "日期时间:

" + (c1));  

26.          

27.  

28.        Calendar c2 = new GregorianCalendar();  

29.        "创建方式:

new GregorianCalendar()");  

30.        "日期时间:

" + (c2));  

31.          

32.  

33.        // 参数含义依次为:

年、月、日  

34.        Calendar c3 = new GregorianCalendar(2008, 8, 8);  

35.        "创建方式:

new GregorianCalendar(2008, 8, 8)");  

36.        "日期时间:

" + (c3));  

37.          

38.  

39.        // 参数含义依次为:

年、月、日、时、分  

40.        Calendar c4 = new GregorianCalendar(2008, 8, 8, 6, 10);  

41.        "创建方式:

new GregorianCalendar(2008, 8, 8, 6, 10)");  

42.        "日期时间:

" + (c4));  

43.          

44.  

45.        // 参数含义依次为:

年、月、日、时、分、秒  

46.        Calendar c5 = new GregorianCalendar(2008, 8, 8, 18, 10, 5);  

47.        "创建方式:

new GregorianCalendar(2008, 8, 8, 18, 10, 5)");  

48.        "日期时间:

" + (c5));  

49.    }  

50.}  

importclassDateTest{

/**

*以一种较为友好的方式格式化日期时间值

*

*@paramc

*日期时间对象

*@return格式化后的日期时间字符串

*/

publicstaticStringtoFriendlyString(Calendarc){

if(c!

=null){

DateFormatdf=newSimpleDateFormat("yyyy年MM月dd日HH:

mm:

ss");

return());

}

returnnull;

}

publicstaticvoidmain(String[]args){

Calendarc1=();

"创建方式:

()");

"日期时间:

"+(c1));

Calendarc2=newGregorianCalendar();

"创建方式:

newGregorianCalendar()");

"日期时间:

"+(c2));

//参数含义依次为:

年、月、日

Calendarc3=newGregorianCalendar(2008,8,8);

"创建方式:

newGregorianCalendar(2008,8,8)");

"日期时间:

"+(c3));

//参数含义依次为:

年、月、日、时、分

Calendarc4=newGregorianCalendar(2008,8,8,6,10);

"创建方式:

newGregorianCalendar(2008,8,8,6,10)");

"日期时间:

"+(c4));

//参数含义依次为:

年、月、日、时、分、秒

Calendarc5=newGregorianCalendar(2008,8,8,18,10,5);

"创建方式:

newGregorianCalendar(2008,8,8,18,10,5)");

"日期时间:

"+(c5));

}

}

运行结果如下:

1.创建方式:

()

2.日期时间:

2008年07月22日11:

54:

48

3.

4.创建方式:

newGregorianCalendar()

5.日期时间:

2008年07月22日11:

54:

48

6.

7.创建方式:

newGregorianCalendar(2008,8,

8.日期时间:

2008年09月08日00:

00:

00

9.

10.创建方式:

newGregorianCalendar(2008,8,8,6,10)

11.日期时间:

2008年09月08日06:

10:

00

12.

13.创建方式:

newGregorianCalendar(2008,8,8,18,10,5)

14.日期时间:

2008年09月08日18:

10:

05

为了便于阅读,我们增加一个toFriendlyString(Calendarc)方法,它将日期时间值格式化为一种更加友好易懂的形式,我们将在接下来的内容中讲解它的实现原理。

分析运行结果后,我们发现有两个地方需要注意:

1.在创建GregorianCalendar对象时,月份值都设定为8,但打印结果都是9月份。

这并不是我们的代码有问题,而是因为JAVA表示的月份是从0开始的,也就是说它用来表示月份的数值总是比实际月份值小1。

因此我们要表示8月份,就是应该设置8-1=7这个值。

2.GregorianCalendar的小时数是24小时制的。

为了避免出现因为忘记处理1的差值而设置了错误的月份,也让代码看起来更加直观,推荐大家使用定义在Calendar类的的这些常量来代替直接用数字表示月份:

一月:

=0

二月:

=1

三月:

=2

四月:

=3

五月:

=4

六月:

=5

七月:

=6

八月:

=7

九月:

=8

十月:

=9

十一月:

=10

十二月:

=11

如果我们想要从Calendar对象获得各种属性的值,就需要调用它的get(intfield)方法,这个方法接收一个int型的参数,并且根据这个给定参数的值来返回相应的属性的值。

该方法的定义如下:

Java代码

1.public int get(int field){  

2.    //other code  

3.}  

publicintget(intfield){

//othercode

}

我们以一个示例来说明get(intfield)方法所能接受的一些常用参数的含义及用法:

Java代码

1.import   

2.import   

3.import   

4.  

5.public class DateTest {  

6.    /** 

7.     * 以一种较为友好的方式格式化日期时间值 

8.     *  

9.     * @param c 

10.     *            日期时间对象 

11.     * @return 格式化后的日期时间字符串 

12.     */  

13.    public static String toFriendlyString(Calendar c) {  

14.        if (c !

= null) {  

15.            DateFormat df = new SimpleDateFormat("yyyy年MM月dd日 HH:

mm:

");  

16.            return ());  

17.        }  

18.        return null;  

19.    }  

20.  

21.    public static void main(String[] args) {  

22.        Calendar c = ();  

23.        "当前时刻:

" + (c));  

24.          

25.  

26.        "属性名称:

");  

27.        "代表含义:

上下午标识,上午返回=0,下午返回=1");  

28.        "测试结果:

" + );  

29.          

30.  

31.        "属性名称:

");  

32.        "代表含义:

一个月中的第几天,同");  

33.        "测试结果:

" + );  

34.          

35.  

36.        "属性名称:

");  

37.        "代表含义:

一个月中的第几天,同");  

38.        "测试结果:

" + );  

39.          

40.  

41.        "属性名称:

");  

42.        "代表含义:

一周中的第几天,对应星期几,第一天为星期日,于此类推。

");  

43.        "星期日:

=1");  

44.        "星期一:

=2");  

45.        "星期二:

=3");  

46.        "星期三:

=4");  

47.        "星期四:

=5");  

48.        "星期五:

=6");  

49.        "星期六:

=7");  

50.        "测试结果:

" + );  

51.          

52.  

53.        "属性名称:

");  

54.        "代表含义:

这一天所对应的星期几在该月中是第几次出现");  

55.        "测试结果:

" + );  

56.          

57.  

58.        "属性名称:

");  

59.        "代表含义:

一年中的第几天");  

60.        "测试结果:

" + );  

61.          

62.  

63.        "属性名称:

");  

64.        "代表含义:

12小时制下的小时数,中午和午夜表示为0");  

65.        "测试结果:

" + );  

66.          

67.  

68.        "属性名称:

");  

69.        "代表含义:

24小时制下的小时数,午夜表示为0");  

70.        "测试结果:

" + );  

71.          

72.  

73.        "属性名称:

");  

74.        "代表含义:

毫秒数");  

75.        "测试结果:

" + );  

76.          

77.  

78.        "属性名称:

");  

79.        "代表含义:

分钟");  

80.        "测试结果:

" + );  

81.          

82.  

83.        "属性名称:

");  

84.        "代表含义:

月份,从0到11表示12个月份,比实际月份值小1");  

85.        "测试结果:

" + );  

86.          

87.  

88.        "属性名称:

");  

89.        "代表含义:

秒");  

90.        "测试结果:

" + );  

91.          

92.  

93.        "属性名称:

");  

94.        "代表含义:

一个月中的第几个星期");  

95.        "测试结果:

" + );  

96.          

97.  

98.        "属性名称:

");  

99.        "代表含义:

一年中的第几个星期");  

100.        "测试结果:

" + );  

101.          

102.  

103.        "属性名称:

");  

104.        "代表含义:

年份");  

105.        "测试结果:

" + );  

106.    }  

107.}  

importclassDateTest{

/**

*以一种较为友好的方式格式化日期时间值

*

*@paramc

*日期时间对象

*@return格式化后的日期时间字符串

*/

publicstaticStringtoFriendlyString(Calendarc){

if(c!

=null){

DateFormatdf=newSimpleDateFormat("yyyy年MM月dd日HH:

mm:

");

return());

}

returnnull;

}

publicstaticvoidmain(String[]args){

Calendarc=();

"当前时刻:

"+(c));

"属性名称:

");

"代表含义:

上下午标识,上午返回=0,下午返回=1");

"测试结果:

"+);

"属性名称:

");

"代表含义:

一个月中的第几天,同");

"测试结果:

"+);

"属性名称:

");

"代表含义:

一个月中的第几天,同");

"测试结果:

"+);

"属性名称:

");

"代表含义:

一周中的第几天,对应星期几,第一天为星期日,于此类推。

");

"星期日:

=1");

"星期一:

=2");

"星期二:

=3");

"星期三:

=4");

"星期四:

=5");

"星期五:

=6");

"星期六:

=7");

"测试结果:

"+);

"属性名称:

");

"代表含义:

这一天所对应的星期几在该月中是第几次出现");

"测试结果:

"+);

"属性名称:

");

"代表含义:

一年中的第几天");

"测试结果:

"+);

"属性名称:

");

"代表含义:

12小时制下的小时数,中午和午夜表示为0");

"测试结果:

"+);

"属性名称:

");

"代表含义:

24小时制下的小时数,午夜表示为0");

"测试结果:

"+);

"属性名称:

");

"代表含义:

毫秒数");

"测试结果:

"+);

"属性名称:

");

"代表含义:

分钟");

"测试结果:

"+);

"属性名称:

");

"代表含义:

月份,从0到11表示12个月份,比实际月份值小1");

"测试结果:

"+);

"属性名称:

");

"代表含义:

秒");

"测试结果:

"+);

"属性名称:

");

"代表含义:

一个月中的第几个星期");

"测试结果:

"+);

"属性名称:

");

"代表含义:

一年中的第几个星期");

"测试结果:

"+);

"属性名称:

");

"代表含义:

年份");

"测试结果:

"+);

}

}

运行结果如下:

1.当前时刻:

2008年07月22日13:

16:

2.

3.属性名称:

4.代表含义:

上下午标识,上午返回=0,下午返回=1

5.测试结果:

1

6.

7.属性名称:

8.代表含义:

一个月中的第几天,同

9.测试结果:

22

10.

11.属性名称:

12.代表含义:

一个月中的第几天,同

13.测试结果:

22

14.

15.属性名称:

16.代表含义:

一周中的第几天,对应星期几,第一天为星期日,于此类推。

17.星期日:

=1

18.星期一:

=2

19.星期二:

=3

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1