详解Java中格式化日期的DateFormat与SimpleDateFormat类
DateFormat
1.DateFormat介绍
DateFormat的作用是格式化并解析“日期/时间”。实际上,它是Date的格式化工具,它能帮助我们格式化Date,进而将Date转换成我们想要的String字符串供我们使用
不过DateFormat的格式化Date的功能有限,没有SimpleDateFormat强大;但DateFormat是SimpleDateFormat的父类。所以,我们先对DateFormat有个整体了解,然后再学习SimpleDateFormat。
DateFormat的作用是格式化Date。它支持格式化风格包括FULL、LONG、MEDIUM和SHORT共4种:
(01)DateFormat.SHORT
完全为数字,如12.13.52或3:30pm
(02)DateFormat.MEDIUM
较长,如Jan12,1952
(03)DateFormat.LONG
更长,如January12,1952或3:30:32pm
(04)DateFormat.FULL
是完全指定,如Tuesday、April12、1952AD或3:30:42pmPST。
DateFormat的定义如下
publicabstractclassNumberFormatextendsFormat{}
DateFormat的函数接口
默认构造函数:
DateFormat()
非构造函数:
Objectclone() booleanequals(Objectobject) abstractStringBufferformat(Datedate,StringBufferbuffer,FieldPositionfield) finalStringBufferformat(Objectobject,StringBufferbuffer,FieldPositionfield) finalStringformat(Datedate) staticLocale[]getAvailableLocales() CalendargetCalendar() finalstaticDateFormatgetInstance() finalstaticDateFormatgetDateInstance() finalstaticDateFormatgetDateInstance(intstyle) finalstaticDateFormatgetDateInstance(intstyle,Localelocale) finalstaticDateFormatgetTimeInstance() finalstaticDateFormatgetTimeInstance(intstyle) finalstaticDateFormatgetTimeInstance(intstyle,Localelocale) finalstaticDateFormatgetDateTimeInstance() finalstaticDateFormatgetDateTimeInstance(intdateStyle,inttimeStyle) finalstaticDateFormatgetDateTimeInstance(intdateStyle,inttimeStyle,Localelocale) NumberFormatgetNumberFormat() TimeZonegetTimeZone() inthashCode() booleanisLenient() Dateparse(Stringstring) abstractDateparse(Stringstring,ParsePositionposition) ObjectparseObject(Stringstring,ParsePositionposition) voidsetCalendar(Calendarcal) voidsetLenient(booleanvalue) voidsetNumberFormat(NumberFormatformat) voidsetTimeZone(TimeZonetimezone)
注意:DateFormat是一个抽象类。
当我们通过DateFormat的getInstance(),getDateInstance()和getDateTimeInstance()获取DateFormat实例时;实际上是返回的SimpleDateFormat对象。
下面的函数实际上都是返回的SimpleDateFormat对象。
finalstaticDateFormatgetInstance() finalstaticDateFormatgetTimeInstance() finalstaticDateFormatgetTimeInstance(intstyle) finalstaticDateFormatgetTimeInstance(intstyle,Localelocale) finalstaticDateFormatgetDateInstance() finalstaticDateFormatgetDateInstance(intstyle) finalstaticDateFormatgetDateInstance(intstyle,Localelocale) finalstaticDateFormatgetDateTimeInstance() finalstaticDateFormatgetDateTimeInstance(intdateStyle,inttimeStyle) finalstaticDateFormatgetDateTimeInstance(intdateStyle,inttimeStyle,Localelocale)
这些函数在SimpleDateFormat.java中的定义如下:
publicstaticfinalintFULL=0; publicstaticfinalintLONG=1; publicstaticfinalintMEDIUM=2; publicstaticfinalintSHORT=3; publicstaticfinalintDEFAULT=MEDIUM; publicfinalstaticDateFormatgetInstance(){ returngetDateTimeInstance(SHORT,SHORT); } publicfinalstaticDateFormatgetTimeInstance() { returnget(DEFAULT,0,1,Locale.getDefault()); } publicfinalstaticDateFormatgetTimeInstance(intstyle) { returnget(style,0,1,Locale.getDefault()); } publicfinalstaticDateFormatgetTimeInstance(intstyle, LocaleaLocale) { returnget(style,0,1,aLocale); } publicfinalstaticDateFormatgetDateInstance() { returnget(0,DEFAULT,2,Locale.getDefault()); } publicfinalstaticDateFormatgetDateInstance(intstyle) { returnget(0,style,2,Locale.getDefault()); } publicfinalstaticDateFormatgetDateInstance(intstyle, LocaleaLocale) { returnget(0,style,2,aLocale); } publicfinalstaticDateFormatgetDateTimeInstance() { returnget(DEFAULT,DEFAULT,3,Locale.getDefault()); } publicfinalstaticDateFormatgetDateTimeInstance(intdateStyle, inttimeStyle) { returnget(timeStyle,dateStyle,3,Locale.getDefault()); } publicfinalstaticDateFormat getDateTimeInstance(intdateStyle,inttimeStyle,LocaleaLocale) { returnget(timeStyle,dateStyle,3,aLocale); } /** *获取DateFormat实例,实际上是返回SimpleDateFormat对象。 * *timeStyle--值可以为“FULL”或“LONG”或“MEDIUM”或“SHORT” *dateStyle--值可以为“FULL”或“LONG”或“MEDIUM”或“SHORT” *flags--值可以为“1”或“2”或“3”。 *1表示获取“时间样式” *2表示获取“日期样式” *3表示获取“时间和日期样式” *loc--locale对象,表示“区域” */ privatestaticDateFormatget(inttimeStyle,intdateStyle, intflags,Localeloc){ if((flags&1)!=0){ if(timeStyle<0||timeStyle>3){ thrownewIllegalArgumentException("Illegaltimestyle"+timeStyle); } }else{ timeStyle=-1; } if((flags&2)!=0){ if(dateStyle<0||dateStyle>3){ thrownewIllegalArgumentException("Illegaldatestyle"+dateStyle); } }else{ dateStyle=-1; } try{ //Checkwhetheraprovidercanprovideanimplementationthat'scloser //totherequestedlocalethanwhattheJavaruntimeitselfcanprovide. LocaleServiceProviderPoolpool= LocaleServiceProviderPool.getPool(DateFormatProvider.class); if(pool.hasProviders()){ DateFormatprovidersInstance=pool.getLocalizedObject( DateFormatGetter.INSTANCE, loc, timeStyle, dateStyle, flags); if(providersInstance!=null){ returnprovidersInstance; } } returnnewSimpleDateFormat(timeStyle,dateStyle,loc); }catch(MissingResourceExceptione){ returnnewSimpleDateFormat("M/d/yyh:mma"); } }
通过上面的代码,我们能够进一步的认识到:DateFormat的作用是格式化Date;帮助我们将Date转换成我们需要的String字符串。DateFormat提供的功能非常有限,它只能支持FULL、LONG、MEDIUM和SHORT这4种格式。而且,我们获取DateFormat实例时,实际上是返回的SimpleDateFormat对象。
2.DateFormat实例
下面,我们通过实例学习使用DateFormat的常用API。
源码如下(DateFormatTest.java):
importjava.util.Date; importjava.util.Locale; importjava.text.DateFormat; importjava.text.FieldPosition; /** *DateFormat的API测试程序 */ publicclassDateFormatTest{ publicstaticvoidmain(String[]args){ //只显示“时间”:调用getTimeInstance()函数 testGetTimeInstance(); //只显示“日期”:调用getDateInstance()函数 testGetDateInstance(); //显示“日期”+“时间”:调用getDateTimeInstance()函数 testGetDateTimeInstance(); //测试format()函数 testFormat(); } /** *测试DateFormat的getTimeInstance()函数 *它共有3种重载形式: *(01)getTimeInstance() *(02)getTimeInstance(intstyle) *(03)getTimeInstance(intstyle,Localelocale) * *@authorskywang */ privatestaticvoidtestGetTimeInstance(){ Datedate=newDate(); //Localelocale=newLocale("fr","FR"); Localelocale=newLocale("zh","CN"); //等价于DateFormat.getTimeInstance(DateFormat.MEDIUM); DateFormatshort0=DateFormat.getTimeInstance(); //参数是:“时间的显示样式” DateFormatshort1=DateFormat.getTimeInstance(DateFormat.SHORT); DateFormatmedium1=DateFormat.getTimeInstance(DateFormat.MEDIUM); DateFormatlong1=DateFormat.getTimeInstance(DateFormat.LONG); DateFormatfull1=DateFormat.getTimeInstance(DateFormat.FULL); //参数是:“时间的显示样式”和“地区” DateFormatshort2=DateFormat.getTimeInstance(DateFormat.SHORT,locale); DateFormatmedium2=DateFormat.getTimeInstance(DateFormat.MEDIUM,locale); DateFormatlong2=DateFormat.getTimeInstance(DateFormat.LONG,locale); DateFormatfull2=DateFormat.getTimeInstance(DateFormat.FULL,locale); System.out.println("\n----getTimeInstance----\n" +"(1.0)EmptyParam:"+short0.format(date)+"\n" +"(2.1)OneParam(s):"+short1.format(date)+"\n" +"(2.2)OneParam(m):"+medium1.format(date)+"\n" +"(2.3)OneParam(l):"+long1.format(date)+"\n" +"(2.4)OneParam(f):"+full1.format(date)+"\n" +"(3.1)OneParam(s,l):"+short2.format(date)+"\n" +"(3.2)OneParam(m,l):"+medium2.format(date)+"\n" +"(3.3)OneParam(l,l):"+long2.format(date)+"\n" +"(3.4)OneParam(f,l):"+full2.format(date)+"\n" ); } /** *测试DateFormat的getDateTimeInstance()函数 *它共有3种重载形式: *(01)getDateInstance() *(02)getDateInstance(intstyle) *(03)getDateInstance(intstyle,Localelocale) */ publicstaticvoidtestGetDateTimeInstance(){ Datedate=newDate(); Localelocale=newLocale("zh","CN"); //等价于DateFormat.getDateTimeInstance(DateFormat.MEDIUM); DateFormatshort0=DateFormat.getDateTimeInstance(); DateFormatshort1=DateFormat.getDateTimeInstance(DateFormat.SHORT,DateFormat.SHORT); DateFormatmedium1=DateFormat.getDateTimeInstance(DateFormat.MEDIUM,DateFormat.MEDIUM); DateFormatlong1=DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.LONG); DateFormatfull1=DateFormat.getDateTimeInstance(DateFormat.FULL,DateFormat.FULL); DateFormatshort2=DateFormat.getDateTimeInstance(DateFormat.SHORT,DateFormat.SHORT,locale); DateFormatmedium2=DateFormat.getDateTimeInstance(DateFormat.MEDIUM,DateFormat.MEDIUM,locale); DateFormatlong2=DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.LONG,locale); DateFormatfull2=DateFormat.getDateTimeInstance(DateFormat.FULL,DateFormat.FULL,locale); System.out.println("\n----getDateTimeInstance----\n" +"(1.0)EmptyParam:"+short0.format(date)+"\n" +"(2.1)OneParam(s):"+short1.format(date)+"\n" +"(2.2)OneParam(m):"+medium1.format(date)+"\n" +"(2.3)OneParam(l):"+long1.format(date)+"\n" +"(2.4)OneParam(f):"+full1.format(date)+"\n" +"(3.1)OneParam(s,l):"+short2.format(date)+"\n" +"(3.2)OneParam(m,l):"+medium2.format(date)+"\n" +"(3.3)OneParam(l,l):"+long2.format(date)+"\n" +"(3.4)OneParam(f,l):"+full2.format(date)+"\n" ); } /** *测试DateFormat的getDateInstance()函数 *它共有3种重载形式: *(01)getDateTimeInstance() *(02)getDateTimeInstance(intdateStyle,inttimeStyle) *(03)getDateTimeInstance(intdateStyle,inttimeStyle,Localelocale) */ publicstaticvoidtestGetDateInstance(){ Datedate=newDate(); //Localelocale=newLocale("en","US"); Localelocale=newLocale("zh","CN"); //等价于DateFormat.getDateInstance(DateFormat.MEDIUM); DateFormatshort0=DateFormat.getDateInstance(); DateFormatshort1=DateFormat.getDateInstance(DateFormat.SHORT); DateFormatmedium1=DateFormat.getDateInstance(DateFormat.MEDIUM); DateFormatlong1=DateFormat.getDateInstance(DateFormat.LONG); DateFormatfull1=DateFormat.getDateInstance(DateFormat.FULL); DateFormatshort2=DateFormat.getDateInstance(DateFormat.SHORT,locale); DateFormatmedium2=DateFormat.getDateInstance(DateFormat.MEDIUM,locale); DateFormatlong2=DateFormat.getDateInstance(DateFormat.LONG,locale); DateFormatfull2=DateFormat.getDateInstance(DateFormat.FULL,locale); System.out.println("\n----getDateInstance----\n" +"(1.0)EmptyParam:"+short0.format(date)+"\n" +"(2.1)OneParam(s):"+short1.format(date)+"\n" +"(2.2)OneParam(m):"+medium1.format(date)+"\n" +"(2.3)OneParam(l):"+long1.format(date)+"\n" +"(2.4)OneParam(f):"+full1.format(date)+"\n" +"(3.1)OneParam(s,l):"+short2.format(date)+"\n" +"(3.2)OneParam(m,l):"+medium2.format(date)+"\n" +"(3.3)OneParam(l,l):"+long2.format(date)+"\n" +"(3.4)OneParam(f,l):"+full2.format(date)+"\n" ); } /** *测试DateFormat的format()函数 */ publicstaticvoidtestFormat(){ Datedate=newDate(); StringBuffersb=newStringBuffer(); FieldPositionfield=newFieldPosition(DateFormat.YEAR_FIELD); DateFormatformat=DateFormat.getDateTimeInstance(); sb=format.format(date,sb,field); System.out.println("\ntestFormat"); System.out.printf("sb=%s\n",sb); } }
运行结果:
----getTimeInstance---- (1.0)EmptyParam:4:54:22PM (2.1)OneParam(s):4:54PM (2.2)OneParam(m):4:54:22PM (2.3)OneParam(l):4:54:22PMCST (2.4)OneParam(f):4:54:22PMCST (3.1)OneParam(s,l):下午4:54 (3.2)OneParam(m,l):16:54:22 (3.3)OneParam(l,l):下午04时54分22秒 (3.4)OneParam(f,l):下午04时54分22秒CST ----getDateInstance---- (1.0)EmptyParam:Jan23,2014 (2.1)OneParam(s):1/23/14 (2.2)OneParam(m):Jan23,2014 (2.3)OneParam(l):January23,2014 (2.4)OneParam(f):Thursday,January23,2014 (3.1)OneParam(s,l):14-1-23 (3.2)OneParam(m,l):2014-1-23 (3.3)OneParam(l,l):2014年1月23日 (3.4)OneParam(f,l):2014年1月23日星期四 ----getDateTimeInstance---- (1.0)EmptyParam:Jan23,20144:54:23PM (2.1)OneParam(s):1/23/144:54PM (2.2)OneParam(m):Jan23,20144:54:23PM (2.3)OneParam(l):January23,20144:54:23PMCST (2.4)OneParam(f):Thursday,January23,20144:54:23PMCST (3.1)OneParam(s,l):14-1-23下午4:54 (3.2)OneParam(m,l):2014-1-2316:54:23 (3.3)OneParam(l,l):2014年1月23日下午04时54分23秒 (3.4)OneParam(f,l):2014年1月23日星期四下午04时54分23秒CST testFormat sb=Jan23,20144:54:23PM
OK。至此,对DateFormat的学习到此为止。接下来,我们开始学习SimpleDateFormat,它才是格式化Date需要重点了解的。
SimpleDateFormat
1.SimpleDateFormat介绍
SimpleDateFormat是一个格式化Date以及解析日期字符串的工具。它的最常用途是,能够按照指定的格式来对Date进行格式化,然后我们使用可以格式化Date后得到的字符串。
更严格的说,SimpleDateFormat是一个以与语言环境有关的方式来格式化和解析日期的具体类。它允许进行格式化(日期->文本)、解析(文本->日期)和规范化。
SimpleDateFormat的构造函数:
构造函数
SimpleDateFormat() SimpleDateFormat(Stringpattern) SimpleDateFormat(Stringtemplate,DateFormatSymbolsvalue) SimpleDateFormat(Stringtemplate,Localelocale)
非构造函数
voidapplyLocalizedPattern(Stringtemplate) voidapplyPattern(Stringtemplate) Objectclone() booleanequals(Objectobject) StringBufferformat(Datedate,StringBufferbuffer,FieldPositionfieldPos) AttributedCharacterIteratorformatToCharacterIterator(Objectobject) Dateget2DigitYearStart() DateFormatSymbolsgetDateFormatSymbols() inthashCode() Dateparse(Stringstring,ParsePositionposition) voidset2DigitYearStart(Datedate) voidsetDateFormatSymbols(DateFormatSymbolsvalue) StringtoLocalizedPattern() StringtoPattern()
SimpleDateFormat简单示范:
//新建date对象,时间是2013-09-19 Datedate=newDate(113,8,19); //新建“SimpleDateFormat对象”,并设置sdf的“格式化模式” SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-dd"); //用sdf格式化date,并返回字符串。 Stringstr=sdf.format(date);
2.SimpleDateFormat相关格式说明
2.1日期和时间模式
日期和时间格式由日期和时间模式字符串指定。在日期和时间模式字符串中,未加引号的字母'A'到'Z'和'a'到'z'被解释为模式字母,用来表示日期或时间字符串元素。文本可以使用单引号(')引起来,以免进行解释。"''"表示单引号。所有其他字符均不解释;只是在格式化时将它们简单复制到输出字符串,或者在解析时与输入字符串进行匹配。
定义了以下模式字母(所有其他字符'A'到'Z'和'a'到'z'都被保留):
字母
日期或时间元素
表示
示例
G
Era标志符
Text
AD
y
年
Year
1996;96
M
年中的月份
Month
July;Jul;07
w
年中的周数
Number
27
W
月份中的周数
Number
2
D
年中的天数
Number
189
d
月份中的天数
Number
10
F
月份中的星期
Number
2
E
星期中的天数
Text
Tuesday;Tue
a
Am/pm标记
Text
PM
H
一天中的小时数(0-23)
Number
0
k
一天中的小时数(1-24)
Number
24
K
am/pm中的小时数(0-11)
Number
0
h
am/pm中的小时数(1-12)
Number
12
m
小时中的分钟数
Number
30
s
分钟中的秒数
Number
55
S
毫秒数
Number
978
z
时区
Generaltimezone
PacificStandardTime;PST;GMT-08:00
Z
时区
RFC822timezone
-0800
模式字母通常是重复的,其数量确定其精确表示:
Text:对于格式化来说,如果模式字母的数量大于等于4,则使用完全形式;否则,在可用的情况下使用短形式或缩写形式。对于解析来说,两种形式都是可接受的,与模式字母的数量无关。
Number:对于格式化来说,模式字母的数量是最小的数位,如果数位不够,则用0填充以达到此数量。对于解析来说,模式字母的数量被忽略,除非必须分开两个相邻字段。
Year:如果格式器的Calendar是格里高利历,则应用以下规则。
Month:如果模式字母的数量为3或大于3,则将月份解释为text;否则解释为number。
对于格式化来说,如果模式字母的数量为2,则年份截取为2位数,否则将年份解释为number。
对于解析来说,如果模式字母的数量大于2,则年份照字面意义进行解释,而不管数位是多少。因此使用模式"MM/dd/yyyy",将"01/11/12"解析为公元12年1月11日。
在解析缩写年份模式("y"或"yy")时,SimpleDateFormat必须相对于某个世纪来解释缩写的年份。这通过将日期调整为SimpleDateFormat实例创建之前的80年和之后20年范围内来完成。例如,在"MM/dd/yy"模式下,如果SimpleDateFormat实例是在1997年1月1日创建的,则字符串"01/11/12"将被解释为2012年1月11日,而字符串"05/04/64"将被解释为1964年5月4日。在解析时,只有恰好由两位数字组成的字符串(如Character#isDigit(char)所定义的)被解析为默认的世纪。其他任何数字字符串将照字面意义进行解释,例如单数字字符串,3个或更多数字组成的字符串,或者不都是数字的两位数字字符串(例如"-1")。因此,在相同的模式下,"01/02/3"或"01/02/003"解释为公元3年1月2日。同样,"01/02/-3"解析为公元前4年1月2日。
否则,则应用日历系统特定的形式。对于格式化和解析,如果模式字母的数量为4或大于4,则使用日历特定的longform。否则,则使用日历特定的shortorabbreviatedform。
SimpleDateFormat还支持本地化日期和时间模式字符串。在这些字符串中,以上所述的模式字母可以用其他与语言环境有关的模式字母来替换。SimpleDateFormat不处理除模式字母之外的文本本地化;而由类的客户端来处理。
示例
以下示例显示了如何在美国语言环境中解释日期和时间模式。给定的日期和时间为美国太平洋时区的本地时间2001-07-0412:08:56。
日期和时间模式
结果
"yyyy.MM.ddG'at'HH:mm:ssz"
2001.07.04ADat12:08:56PDT
"EEE,MMMd,''yy"
Wed,Jul4,'01
"h:mma"
12:08PM
"hh'o''clock'a,zzzz"
12o'clockPM,PacificDaylightTime
"K:mma,z"
0:08PM,PDT
"yyyyy.MMMMM.ddGGGhh:mmaaa"
02001.July.04AD12:08PM
"EEE,dMMMyyyyHH:mm:ssZ"
Wed,4Jul200112:08:56-0700
"yyMMddHHmmssZ"
010704120856-0700
"yyyy-MM-dd'T'HH:mm:ss.SSSZ"
2001-07-04T12:08:56.235-0700
日期格式是不同步的。建议为每个线程创建独立的格式实例。如果多个线程同时访问一个格式,则它必须是外部同步的。
3.SimpleDateFormat示例
下面,我们通过实例学习如何使用SimpleDateFormat。
源码如下(SimpleDateFormatTest.java):
importjava.util.Date; importjava.util.Locale; importjava.util.Calendar; importjava.text.DateFormat; importjava.text.SimpleDateFormat; /** *SimpleDateFormat的API测试程序 * *@authorskywang *@emailkuiwu-wang@163.com */ publicclassSimpleDateFormatTest{ publicstaticvoidmain(String[]args){ //通过SimpleDateFormat获取日期/时间:有多种格式 testSimpleDateFormats(); //通过DateFormat获取日期/时间 superTest(); } /** *通过SimpleDateFormat获取日期/时间。有多种格式可以选择 */ privatestaticvoidtestSimpleDateFormats(){ String[]formats=newString[]{ "HH:mm",//14:22 "h:mma",//2:22下午 "HH:mmz",//14:22CST "HH:mmZ",//14:22+0800 "HH:mmzzzz",//14:22中国标准时间 "HH:mm:ss",//14:22:30 "yyyy-MM-dd",//2013-09-19 "yyyy-MM-ddHH:mm",//2013-09-1914:22 "yyyy-MM-ddHH:mm:ss",//2013-09-1914:22:30 "yyyy-MM-ddHH:mm:sszzzz",//2013-09-1914:22:30中国标准时间 "EEEEyyyy-MM-ddHH:mm:sszzzz",//星期四2013-09-1914:22:30中国标准时间 "yyyy-MM-ddHH:mm:ss.SSSZ",//2013-09-1914:22:30.000+0800 "yyyy-MM-dd'T'HH:mm:ss.SSSZ",//2013-09-19T14:22:30.000+0800 "yyyy.MM.ddG'at'HH:mm:ssz",//2013.09.19公元at14:22:30CST "K:mma",//2:22下午,CST "EEE,MMMd,''yy",//星期四,九月19,'13 "hh'o''clock'a,zzzz",//02o'clock下午,中国标准时间 "yyyyy.MMMMM.ddGGGhh:mmaaa",//02013.九月.19公元02:22下午 "EEE,dMMMyyyyHH:mm:ssZ",//星期四,19九月201314:22:30+0800 "yyMMddHHmmssZ",//130919142230+0800 "yyyy-MM-dd'T'HH:mm:ss.SSSZ",//2013-09-19T14:22:30.000+0800 "EEEE'DATE('yyyy-MM-dd')''TIME('HH:mm:ss')'zzzz",//星期四2013-09-1914:22:30中国标准时间 }; //Datedate=(newDate(0));//date为1970-01-0107:00:00 //Datedate=Calendar.getInstance().getTime();//date为当前时间 Datedate=newDate(113,8,19,14,22,30);//date为2013-09-1914:22:30 for(Stringformat:formats){ SimpleDateFormatsdf=newSimpleDateFormat(format,Locale.SIMPLIFIED_CHINESE); //SimpleDateFormatsdf=newSimpleDateFormat(format); System.out.format("%30s%s\n",format,sdf.format(date)); } } /** *通过DateFormat获取日期/时间 */ privatestaticvoidsuperTest(){ //新建date对象,时间是2013-09-1914:22:30 //(01)年=“‘目标年'-1900”, //(02)月。0是一月,1是二月,依次类推。 //(03)日。1-31之间的数 DatemDate=newDate(113,8,19,14,22,30); Localelocale=newLocale("zh","CN"); //14:22:30 Stringtime=DateFormat.getTimeInstance(DateFormat.MEDIUM,Locale.SIMPLIFIED_CHINESE).format(mDate); //2013-09-19 Stringdate=DateFormat.getDateInstance(DateFormat.MEDIUM,Locale.SIMPLIFIED_CHINESE).format(mDate); //2013-09-1914:22:30 Stringdatetime=DateFormat.getDateTimeInstance(DateFormat.MEDIUM,DateFormat.MEDIUM,Locale.SIMPLIFIED_CHINESE).format(mDate); System.out.printf("\ntime=%s\ndate=%s\ndatetime=%s\n",time,date,datetime); } }
运行结果:
HH:mm14:22 h:mma2:22下午 HH:mmz14:22CST HH:mmZ14:22+0800 HH:mmzzzz14:22中国标准时间 HH:mm:ss14:22:30 yyyy-MM-dd2013-09-19 yyyy-MM-ddHH:mm2013-09-1914:22 yyyy-MM-ddHH:mm:ss2013-09-1914:22:30 yyyy-MM-ddHH:mm:sszzzz2013-09-1914:22:30中国标准时间 EEEEyyyy-MM-ddHH:mm:sszzzz星期四2013-09-1914:22:30中国标准时间 yyyy-MM-ddHH:mm:ss.SSSZ2013-09-1914:22:30.000+0800 yyyy-MM-dd'T'HH:mm:ss.SSSZ2013-09-19T14:22:30.000+0800 yyyy.MM.ddG'at'HH:mm:ssz2013.09.19公元at14:22:30CST K:mma2:22下午 EEE,MMMd,''yy星期四,九月19,'13 hh'o''clock'a,zzzz02o'clock下午,中国标准时间 yyyyy.MMMMM.ddGGGhh:mmaaa02013.九月.19公元02:22下午 EEE,dMMMyyyyHH:mm:ssZ星期四,19九月201314:22:30+0800 yyMMddHHmmssZ130919142230+0800 yyyy-MM-dd'T'HH:mm:ss.SSSZ2013-09-19T14:22:30.000+0800 EEEE'DATE('yyyy-MM-dd')''TIME('HH:mm:ss')'zzzz星期四DATE(2013-09-19)TIME(14:22:30)中国标准时间 time=14:22:30 date=2013-9-19 datetime=2013-9-1914:22:30