我们还是通过例子来说明:
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得到想要格式。