java 日期(Date DateFormat Calendar)

来源:互联网 发布:金融数据终端 编辑:程序博客网 时间:2024/06/11 21:14

我们还是通过例子来说明:

public static void main(String[] args)
 {
  Date date=new Date();
  System.out.println(date);

 }

result:Tue Aug 26 14:40:07 CST 2008

这个结果让人不是很明白吧

下面我们要format一下

public static void main(String[] args)
 {
  Date date=new Date();
  DateFormat df=DateFormat.getDateInstance();


  String s=df.format(date);


  System.out.println(s);
  System.out.println(date);

 }

result:

2008-8-26
Tue Aug 26 14:45:32 CST 2008

是不是发现少了什么? 对,具体的时间没有了

看看这个吧

public static void main(String[] args)
 {
  Date date=new Date();
  DateFormat df=DateFormat.getDateInstance();
  DateFormat df0=DateFormat.getDateTimeInstance();//使用getDateTimeInstance生成format实例,这样就可以把datetime显示出来了
  String s=df.format(date);
  String s0=df0.format(date);
  System.out.println(s);
  System.out.println(s0);
  System.out.println(date);

 }

result:

2008-8-26
2008-8-26 14:47:15
Tue Aug 26 14:47:15 CST 2008

×××××××××××××××××××××××××××××××××××××××××××××××

现在我们来看下面的一个例子,主要是对getDateInstance的具体学习:

public static void main(String[] args)
 {
  Date date=new Date();

/*

通过改变getDateInstance中的参数,我们可以得到对应的format格式,默认的情况下使用DateFormat.MEDIUM

*/

  DateFormat df=DateFormat.getDateInstance();
  DateFormat df_s=DateFormat.getDateInstance(DateFormat.SHORT);
  DateFormat df_m=DateFormat.getDateInstance(DateFormat.MEDIUM);
  DateFormat df_l=DateFormat.getDateInstance(DateFormat.LONG);
  DateFormat df_f=DateFormat.getDateInstance(DateFormat.FULL);
  

  String s=df.format(date);
  String s_s=df_s.format(date);
  String s_m=df_m.format(date);
  String s_l=df_l.format(date);
  String s_f=df_f.format(date);
  

  System.out.println(s);
  System.out.println(s_s);
  System.out.println(s_m);
  System.out.println(s_l);
  System.out.println(s_f);

}

result:

2008-8-26
08-8-26
2008-8-26
2008年8月26日
2008年8月26日 星期二

这里要提一下,应为我们在中国,使用的是中文操作系统。所以format date以后我们自然得到的是中文。这个国际化Java已经帮我们做好了

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

下面在看看Calendar,Calendar是个抽象类,他又一个子类GregorianCalendar,这个子类比较有用。

现在我们来写第一个程序关于Calendar:

public static void main(String[] args)
 {
 GregorianCalendar gregorianCalendar=new GregorianCalendar();  
  System.out.println(gregorianCalendar);

 }

result:

java.util.GregorianCalendar[time=1219734873687,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=19,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2008,MONTH=7,WEEK_OF_YEAR=35,WEEK_OF_MONTH=5,DAY_OF_MONTH=26,DAY_OF_YEAR=239,DAY_OF_WEEK=3,DAY_OF_WEEK_IN_MONTH=4,AM_PM=1,HOUR=3,HOUR_OF_DAY=15,MINUTE=14,SECOND=33,MILLISECOND=687,ZONE_OFFSET=28800000,DST_OFFSET=0]

看到这个结果,我们开始使用的Date有很大差别吧

看看下面的例子:

public static void main(String[] args)
 {
 GregorianCalendar gregorianCalendar=new GregorianCalendar(); 

 Date dt=gregorianCalendar0.getTime();//将它转化成date,这样我们就可以用上面学习的方法来处理了
  System.out.println(dt);

 }

result:

Tue Aug 26 15:26:45 CST 2008

这里有必要对GregorianCalendar的构造函数说明一下:

public static void main(String[] args)
 {
 GregorianCalendar gregorianCalendar=new GregorianCalendar(1999,16,788);//注意这里的天数
  
  Date dt=gregorianCalendar.getTime();
  
  DateFormat df=DateFormat.getDateInstance();
  String s=df.format(dt);
  System.out.println(s);

 }

result:

2002-6-27

这里说明了GregorianCalendar的构造函数会对日期进行累加的,他的方法中add 和set也有同样的特性。一年的第一个月表示为0,二月表示为1.。。

这里您可能存在一些疑问,为什么要用到Calendar呢?Date不是很好吗?使用Calendar到后面还要转化成Date,是不是有点多此一举?其实不然,只要看过date api都会发现,date里面有很多方法都过时了的,取而代之的是Calendar里面的方法,因为Calendar及其他的子类中存在很多处理时间的方法。

下面就是关于Calendar及其用法:

GregorianCalendar gregorianCalendar=new GregorianCalendar(1999,Calendar.AUGUST,31);
  
  gregorianCalendar.add(Calendar.MONTH,13);注意我们加的是13个月,因为2000年的9月没有31天的,所以程序会选择9月30做为加一个月以后要显示的日期
  
  int i=gregorianCalendar.get(Calendar.DAY_OF_WEEK);

//gregorianCalendar.set(Calendar.DAY_OF_MONTH, 33);通过这里我们可以看到其实我们使用的是内存在同一份copy,并且日期也可以累加。所以如果我们要表示一个增量的话,应该同时拥有2份内存copy
  
  Date dt=gregorianCalendar.getTime();
  
  DateFormat df=DateFormat.getDateInstance();
  String s=df.format(dt);
  System.out.println(s);
  System.out.println(i);

 

result:

2000-9-30
7

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

总结:Java time方面主要是这3个类

Date,DateFormat,GregorianCalendar,其中GregorianCalendar拥有很多处理时间方面的方法,通过getTime与Date进行转换,最后通过DateFormat得到想要格式。

0 0