详解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