博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
格式化日期和时间
阅读量:4049 次
发布时间:2019-05-25

本文共 4000 字,大约阅读时间需要 13 分钟。

-- Start

预定义格式

不同国家和地区显示日期和时间的方式是不同的, 显然格式化日期和时间和本地的语言环境有密切关系. 利用 DateFormat 类提供的方法, 我们可以很容易的将日期和时间格式化成符合本地语言环境的形式.

格式化日期

下面的例子演示了各个国家和地区是如何显示日期的.

public static void main(String[] args) throws Exception {	for (Locale locale : Locale.getAvailableLocales()) {	    DateFormat df = DateFormat.getDateInstance(DateFormat.DEFAULT, locale);	    System.out.println(df.format(new Date()) + "    " + locale.getDisplayName(locale.CHINA));	}}
上面的例子使用默认的格式化风格(DateFormat.DEFAULT)来格式化日期, 事实上, DateFormat 类还提供了下列格式化风格.

  • DEFAULT
  • SHORT
  • MEDIUM
  • LONG
  • FULL

下面的表格显示了中国, 美国和日本显示日期的不同.

风格 中国 美国 日本
DEFAULT 2012-5-11 May 11, 2012 2012/05/11
SHORT 12-5-11 5/11/12 12/05/11
MEDIUM 2012-5-11 May 11, 2012 2012/05/11
LONG 2012年5月11日 May 11, 2012 2012/05/11
FULL 2012年5月11日 星期五 Friday, May 11, 2012 2012年5月11日

格式化时间

有了格式化日期的经验, 格式化时间是非常简单的, 我们只需使用 getTimeInstance  来得到 DateFormat 的实例即可.

下面的表格显示了中国, 美国和日本显示时间的不同.

风格 中国 美国 日本
DEFAULT 3:12:36 3:12:36 AM 3:12:36
SHORT 上午3:13 3:13 AM 3:13
MEDIUM 3:13:32 3:13:32 AM 3:13:32
LONG 上午03时13分48秒 3:13:48 AM CDT 3:13:48 CDT
FULL 上午03时14分08秒 CDT 3:14:08 AM CDT 3時14分08秒 CDT

格式化日期和时间

要想格式化日期和时间, 我们只需使用 getDateTimeInstance  来得到 DateFormat 的实例即可.

下面的表格显示了中国,美国和日本显示时间的不同.

风格 中国 美国 日本
DEFAULT 2012-5-11 3:20:08 May 11, 2012 3:20:08 AM 2012/05/11 3:20:08
SHORT 12-5-11 上午3:20 5/11/12 3:20 AM 12/05/11 3:20
MEDIUM 2012-5-11 3:20:53 May 11, 2012 3:20:53 AM 2012/05/11 3:20:53
LONG 2012年5月11日 上午03时34分33秒 May 11, 2012 3:34:33 AM CDT 2012/05/11 3:34:33 CDT
FULL 2012年5月11日 星期五 上午03时35分04秒 CDT Friday, May 11, 2012 3:35:04 AM CDT 2012年5月11日 3時35分04秒 CDT

自定义格式

DateFormat 类提供的方法可以很容易的使我们把日期和时间格式化成符合用户语言习惯的形式, 但是我们并不能自定义格式, 当用户需要特殊格式的时候, 我们应该使 SimpleDateFormat.下面是一个简单的例子.

public static void main(String[] args) throws Exception {	List
locals = new ArrayList
(3); locals.add(Locale.CHINA); locals.add(Locale.US); locals.add(Locale.JAPAN); Date today = new Date(); for (Locale locale : locals) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd EEE", locale); System.out.println(sdf.format(today) + " " + locale.getDisplayName(locale.CHINA)); }}
运行结果如下:

2012-05-13 星期日     中文 (中国)2012-05-13 Sunday    英文 (美国)2012-05-13 日曜日     日文 (日本)
从上面输出结果中我们可以看到, 虽然我们可以自定义格式, 但是
类似星期等这类非数字信息是本地敏感的, 这一点需要注意.

我们可以使用下列字母来自定义日期格式.

Letter  Date or Time Component  Presentation  Examples
G  Era designator  Text  AD
y  Year  Year  1996; 96
M  Month in year  Month  July; Jul; 07
w  Week in year  Number  27
W  Week in month  Number  2
D  Day in year  Number  189
d  Day in month  Number  10
F  Day of week in month  Number  2
E  Day in week  Text  Tuesday; Tue
a  Am/pm marker  Text  PM
H  Hour in day (0-23)  Number  0
k  Hour in day (1-24)  Number  24
K  Hour in am/pm (0-11)  Number  0
h  Hour in am/pm (1-12)  Number  12
m  Minute in hour  Number  30
s  Second in minute  Number  55
S  Millisecond  Number  978
z  Time zone  General time zone  Pacific Standard Time; PST; GMT-08:00
Z  Time zone  RFC 822 time zone  -0800

在把字符串转化成日期的时候, 有一点特别需要注意, 在默认情况下, SimpleDateFormat 采用宽松的方式解析字符串, 虽然4月没有31号, 但是下面的代码并不会出错, 而是解析成5月1号. 如果我们在解析字符串之前调用了 setLenient(false) 方法, 那么下面的代码会抛出异常.

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA);//sdf.setLenient(false); // 有这行代码, 下面的代码会抛异常System.out.println(sdf.parse("2012-04-31"));

自定义格式符

DateFormatSymbols 类提供了下列方法来允许我们定制星期,月份等的输出.

setAmPmStringssetErassetMonthssetShortMonthssetShortWeekdayssetWeekdayssetZoneStrings
从上一个例子我们可以看到, 我们国家的星期显示为: 星期一 ... 星期日, 如果我想把它们修改成 周一 ... 周日 的形式该怎么办呢?

public static void main(String[] args) throws Exception {	Date today = new Date(); 		// 默认形式	SimpleDateFormat sdf = new SimpleDateFormat("E", Locale.CHINA);	System.out.println("默认形式:   " + sdf.format(today));			//自定义形式	DateFormatSymbols symbols = new DateFormatSymbols(Locale.CHINA);	symbols.setShortWeekdays(new String[]{"", "周日", "周一", "周二", "周三", "周四", "周五", "周六"});		sdf = new SimpleDateFormat("E", symbols);	System.out.println("自定义形式: " + sdf.format(today));}
运行结果如下:

默认形式:   星期一自定义形式: 周一
---
更多参见:
--
声 明:转载请注明出处
-- Last Updated on 2012-05-14
-- Written by ShangBo on 2012-05-11
-- End

你可能感兴趣的文章
国家公务员的级别
查看>>
悼念地震死难者:使整个网页变黑白色(灰色)的特效代码
查看>>
asp.net优化完全技巧
查看>>
道 经
查看>>
德 经
查看>>
藏太甲于桐宫-从电视剧康熙王朝中学到的历史知识
查看>>
开发过程中的沟通问题
查看>>
“众”字透出的哲学
查看>>
恋爱爱情婚姻家庭与炒股票
查看>>
答非所问的古今中外名人小笑话幽默
查看>>
周易、命理、风水、姓名与命运交流周易研究心得:姓名学
查看>>
解决asp.net中tabstrip不能点击的问题
查看>>
PB中使用blob进行文件读取的性能问题
查看>>
DataWindow.net中如何实现鼠标划过时变颜色
查看>>
Datawindow.net中设置字符串的显示,超过长度部分显示为。。。
查看>>
PowerBuilder中使用带返回的powerobjectparm
查看>>
从oracle表中随机取记录,产生随机数和随机字符串
查看>>
功夫熊猫,中国式的哲学和西方式的搞笑
查看>>
Oracle SYS口令深入解析
查看>>
XP中IIS“http500”错误的终极解决方法
查看>>