这篇文章介绍了关于日期处理的3个重要的类:Date,DateFormat,GregorianCalendar.这些类让你创建日期,转换成字符串,和计算日期基本元素。处理Java中的日期问题,这篇文章只是冰山一角。可是,我在这里介绍的类和方法不仅仅是你学习高级技术的跳板,这些类和方法本身就可以处理很多通常的日期相关的任务。

Java核算从1970年1月1日起的毫秒的数量表明日期。也就是说,例如,1970年1月2日,是在1月1日后的86,400,000毫秒。相同的,1969年12月31日是在1970年1月1日前86,400,000毫秒。Java的Date类运用long类型纪录这些毫秒值.由于long是有符号整数,所以日期能够在1970年1月1日之前,也能够在这之后。Long类型表明的***正值和***负值能够轻松的表明290,000,000年的时间,这合适大多数人的时间要求。

浅谈Java编程语言中创建和运用日期(java创建时间类)  java编程语言 第1张

Java编程言语中的Date类

Date类能够在java.util包中找到,用一个long类型的值表明一个指定的时间。它的一个有用的结构函数是Date(),它创立一个表明创立时间的方针。getTime()办法回来Date方针的long值。鄙人面的程序中,我运用Date()结构函数创立一个表明程序运转时间的方针,并且运用getTime()办法找到这个日期代表的毫秒数量:

  1. importjava.util.*;
  2. publicclassNow{
  3. publicstaticvoidmain(String[]args){
  4. Datenow=newDate();
  5. longnowLong=now.getTime();
  6. System.out.println("Valueis"+nowLong);
  7. }
  8. }


当我运转这个程序后,我得到972,568,255,150.快速承认一下这个数字,最少在一个合理的规模:它不到31年,这个数值相对1970年1月1日到我写这篇文章的时间来说,是合理的。核算机是这个毫秒值表明时间,人们可不乐意说"我将在996,321,998,34见到你。"走运的是,Java供给了一个转化Date方针到字符串的途径,表明成传统的方式。咱们鄙人一节评论DateFormat类,它直观的树立日期字符串。

Java编程言语中的DateFormat类

DateFormat类的一个方针是树立一个人们能够辨认的字符串。可是,由于言语的不同,不是所有的人期望看到严厉的相同格局的日期。法国人更喜爱看到"25decembre2000,",可是美国人习气看到"December25,2000."所以一个DateFormat的实例创立今后,这个方针包含了日期的显现格局的信息。假如运用用户电脑区域设置缺省的格局,你能够象下面那样,创立DateFormat方针,运用getDateInstance()办法:


DateFormatdf=DateFormat.getDateInstance();


DateFormat类在java.text包中能够找到。

转化成字符串

你能够运用format()办法转化Date方针为一个字符串。下面的示例程序说明晰这个问题:


  1. importjava.util.*;
  2. importjava.text.*;
  3. publicclassNowString{
  4. publicstaticvoidmain(String[]args){
  5. Datenow=newDate();
  6. DateFormatDateFormatdf=DateFormat.getDateInstance();
  7. Strings=df.format(now);
  8. System.out.println("Todayis"+s);
  9. }
  10. }


在上面的代码中,展现了没有参数,运用缺省格局的getDateInstance()办法。Java还供给了几个挑选日期格局,你能够经过运用重载的getDateInstance(intstyle)取得。出于便利的原因,DateFormat供给了几种预置的常量,你能够运用这些常量参数。下面是几个SHORT,MEDIUM,LONG,和FULL类型的示例:


  1. importjava.util.*;
  2. importjava.text.*;
  3. publicclassStyleDemo{
  4. publicstaticvoidmain(String[]args){
  5. Datenow=newDate();
  6. DateFormatDateFormatdf=DateFormat.getDateInstance();
  7. DateFormatDateFormatdf1=DateFormat.getDateInstance(DateFormat.SHORT);
  8. DateFormatDateFormatdf2=DateFormat.getDateInstance(DateFormat.MEDIUM);
  9. DateFormatDateFormatdf3=DateFormat.getDateInstance(DateFormat.LONG);
  10. DateFormatDateFormatdf4=DateFormat.getDateInstance(DateFormat.FULL);
  11. Strings=df.format(now);
  12. Strings1=df1.format(now);
  13. Strings2=df2.format(now);
  14. Strings3=df3.format(now);
  15. Strings4=df4.format(now);
  16. System.out.println("(Default)Todayis"+s);
  17. System.out.println("(SHORT)Todayis"+s1);
  18. System.out.println("(MEDIUM)Todayis"+s2);
  19. System.out.println("(LONG)Todayis"+s3);
  20. System.out.println("(FULL)Todayis"+s4);
  21. }
  22. }


程序输出如下:


(Default)TodayisNov8,2000

(SHORT)Todayis11/8/00

(MEDIUM)TodayisNov8,2000

(LONG)TodayisNovember8,2000

(FULL)TodayisWednesday,November8,2000


相同的程序,在我的电脑上运用缺省设置运转后,改动区域设置为瑞典,输出如下:


(Default)Todayis2000-nov-08

(SHORT)Todayis2000-11-08

(MEDIUM)Todayis2000-nov-08

(LONG)Todayisden8november2000

(FULL)Todayisden8november2000


从这儿,你能看到,瑞典的月份不是大写的(尽管November仍是november).还有,LONG和FULL版别在瑞典语中是相同的,可是美国英语却不同。别的,风趣的是,瑞典语单词的星期三,onsdag,没有包含在FULL日期里,英语却包含。

留意你能够运用getDateInstance()办法改动DateFormat实例的语种;可是,在上面的比如中,是经过改动Windows98的控制面板的区域设置做到的。不同的当地的区域设置不同,成果就不同,这样有优点,也有缺乏,Java程序员应该了解这些。一个优点是Java程序员能够只写一行代码就能够显现日期,并且国际不同区域的电脑运转相同的程序会有不必的日期格局。可是这也是一个缺陷,当程序员期望显现同一种格局的时--这也有可取之处,举例来说,在程序中混合输出文本和日期,假如文本是英文,咱们就不期望日期格局是其他的格局,象德文或是西班牙文。假如程序员依托日期格局编程,日期格局将依据运转程序地点电脑的区域设置不必而不同。

解析字符串

经过parse()办法,DateFormat能够以一个字符串创立一个Date方针。这个办法能抛出ParseException反常,所以你有必要运用恰当的反常处理技能。下面的比如程序经过字符串创立Date方针:


  1. importjava.util.*;
  2. importjava.text.*;
  3. publicclassParseExample{
  4. publicstaticvoidmain(String[]args){
  5. Stringds="November1,2000";
  6. DateFormatDateFormatdf=DateFormat.getDateInstance();
  7. try{
  8. Dated=df.parse(ds);
  9. }
  10. catch(ParseExceptione){
  11. System.out.println("Unabletoparse"+ds);
  12. }
  13. }
  14. }


在创立一个恣意的日期时parse()办法很有用。我将经过另一种办法创立一个恣意得日期。一起,你将看到怎样进行根本日期核算,例如核算90天后的另一天。你能够运用GregorianCalendar类来完结这个使命。

GregorianCalendar类

创立一个代表恣意日期的一个途径运用GregorianCalendar类的结构函数,它包含在java.util包中:


GregorianCalendar(intyear,intmonth,intdate)


留意月份的表明,一月是0,二月是1,以此类推,是12月是11。由于大多数人习气于运用单词而不是运用数字来表明月份,这样程序或许更易读,父类Calendar运用常量来表明月份:JANUARY,FEBRUARY,等等。所以,创立Wilbur和Orville制作***架动力飞机的日期(December17,1903),你能够运用:


GregorianCalendarfirstFlight=newGregorianCalendar(1903,Calendar.DECEMBER,17);

出于清楚的考虑,你应该运用前面的方式。可是,你也应该学习怎样阅览下面的短格局。下面的比如相同表明December17,1903(记住,在短格局中,11表明December)


GregorianCalendarfirstFlight=newGregorianCalendar(1903,11,17);


在上一节中,你学习了转化Date方针到字符串。这儿,你能够做相同的工作;可是首要,你需要将GregorianCalendar方针转化到Date。要做到这一点,你能够运用getTime()办法,从它得父类Calendar承继而来。GetTime()办法回来GregorianCalendar相应的Date方针。你能够创立GregorianCalendar方针,转化到Date方针,得到和输出相应的字符串这样一个进程。下面是比如:


  1. importjava.util.*;
  2. importjava.text.*;
  3. publicclassFlight{
  4. publicstaticvoidmain(String[]args){
  5. GregorianCalendarfirstFlight=newGregorianCalendar(1903,Calendar.DECEMBER,17);
  6. Dated=firstFlight.getTime();
  7. DateFormatDateFormatdf=DateFormat.getDateInstance();
  8. Strings=df.format(d);
  9. System.out.println("Firstflightwas"+s);
  10. }
  11. }


有时候创立一个代表当时时间的GregorianCalendar类的实例是很有用的。你能够简略的运用没有参数的GregorianCalendar结构函数,象这样:


GregorianCalendarthisday=newGregorianCalendar();


一个输出今日日期的比如程序,运用GregorianCalendar方针:


  1. importjava.util.*;
  2. importjava.text.*;
  3. classToday{
  4. publicstaticvoidmain(String[]args){
  5. GregorianCalendarthisday=newGregorianCalendar();
  6. Dated=thisday.getTime();
  7. DateFormatDateFormatdf=DateFormat.getDateInstance();
  8. Strings=df.format(d);
  9. System.out.println("Todayis"+s);
  10. }
  11. }


留意到,Date()结构函数和GregorianCalendar()结构函数很相似:都创立一个方针,条件简略,代表今日。

日期处理

GregorianCalendar类供给处理日期的办法。一个有用的办法是add().运用add()办法,你能够添加象年,月数,天数到日期方针中。要运用add()办法,你有必要供给要添加的字段,要添加的数量。一些有用的字段是DATE,MONTH,YEAR,和WEEK_OF_YEAR。下面的程序运用add()办法核算未来80天的一个日期。在Jules的是一个重要的数字,运用这个程序能够核算PhileasFogg从动身的那一天1872年10月2日后80天的日期:


  1. importjava.util.*;
  2. importjava.text.*;
  3. publicclassWorld{
  4. publicstaticvoidmain(String[]args){
  5. GregorianCalendarworldTour=newGregorianCalendar(1872,Calendar.OCTOBER,2);
  6. worldTour.add(GregorianCalendar.DATE,80);
  7. Dated=worldTour.getTime();
  8. DateFormatDateFormatdf=DateFormat.getDateInstance();
  9. Strings=df.format(d);
  10. System.out.println("80daytripwillend"+s);
  11. }
  12. }


这个比如是幻想的,但在一个日期上添加天数是一个遍及的操作:影碟能够租3天,图书馆能够借书21天,商铺常常需要将购买的物品在30天内卖出。下面的程序演示了运用年核算:


  1. importjava.util.*;
  2. importjava.text.*;
  3. publicclassMortgage{
  4. publicstaticvoidmain(String[]args){
  5. GregorianCalendarmortgage=newGregorianCalendar(1997,Calendar.MAY,18);
  6. mortgage.add(Calendar.YEAR,15);
  7. Dated=mortgage.getTime();
  8. DateFormatDateFormatdf=DateFormat.getDateInstance();
  9. Strings=df.format(d);
  10. System.out.println("15yearmortgageamortizedon"+s);}
  11. }


add()一个重要的副作用是它改动的本来的日期。有时候,具有原始日期和修改后的日期很重要。不幸的是,你不能简略的创立一个GregorianCalendar方针,设置它和本来的持平(equal)。原因是两个变量指向同一个Date()方针地址。假如Date方针改动,两个变量就指向改动后的日期方针。替代这种做法,应该创立一个新方针。下面的程序演示了这种做法:


  1. importjava.util.*;
  2. importjava.text.*;
  3. publicclassThreeDates{
  4. publicstaticvoidmain(String[]args){
  5. GregorianCalendargc1=newGregorianCalendar(2000,Calendar.JANUARY,1);
  6. GregorianCalendargc2=gc1;
  7. GregorianCalendargc3=newGregorianCalendar(2000,Calendar.JANUARY,1);
  8. //ThreedatesallequaltoJanuary1,2000
  9. gc1.add(Calendar.YEAR,1);
  10. file://gc1andgc2arechanged
  11. DateFormatDateFormatdf=DateFormat.getDateInstance();
  12. Dated1=gc1.getTime();
  13. Dated2=gc2.getTime();
  14. Dated3=gc3.getTime();
  15. Strings1=df.format(d1);
  16. Strings2=df.format(d2);
  17. Strings3=df.format(d3);
  18. System.out.println("gc1is"+s1);
  19. System.out.println("gc2is"+s2);
  20. System.out.println("gc3is"
转载请说明出处
知优网 » 浅谈Java编程语言中创建和运用日期(java创建时间类)

发表评论

您需要后才能发表评论