SimpleDateFormat格式处理日期,注意一下Locale(转)

本文探讨了使用Java SimpleDateFormat解析日期时遇到的问题,特别是在不同语言环境下解析英文月份缩写时出现的异常。通过指定Locale为US,成功解决了日期解析问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们通常都很喜欢用SimpleDateFormat来做一些日期和字符串之间的转换,就是所谓的format()和parse()了,具体用法看程序或者是JAVA的API文档,这里不累述了。

但是往往我们忘记了,JAVA的国际化这个让人欢喜让人愁的东西。

下面出现一个问题:
以下程序段

String dateStr = "17/Mar/2003 11:30:51";
SimpleDateFormat frm = new SimpleDateFormat("dd/MMM/yyyy HH:mm:ss");
Date date = frm.parse(dateStr);


SimpleDateFormat frm1 = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
System.out.println("reformat : " + frm1.format(date));

这运行时会抛出异常java.text.ParseException: Unparseable date: "17/Mar/2003 11:30:51",显然程序不能parse到“Mar”这个英文月的缩写。但是按照java上面的文档显示,以上程序是没有问题的。一个典型的运行时异常。不用说考虑一下我们的环境。

当前程序编写的环境是中文winxp,jdk1.4.2,IDEA 4.0,呵呵,我们是中国人当然都喜欢用中文环境啦。问题出来了吧?看一下一段代码:
Date date = new Date();
SimpleDateFormat frm1 = new SimpleDateFormat("yyyy/MMM/dd HH:mm:ss");
System.out.println("now : " + frm1.format(date));

输出结果是:now : 2004/二月/24 11:57:00

看到了,缺省状态底下,我们用SimpleDateFormat是按照我们当前系统的Locale(请恕我一直都搞不清楚他的中文翻译)的,也就是中文的Locale,但是我们要进行分析的日期字符串是英文的,当然就认不出来了。
ok,知道了之后,我们修改一下加多个locale进去,让SimpleDateFormat在构造的时候指定Locale(Java是很笨的,我们不说他怎么知道呢?)告诉他我们现在要处理的是英文的格式串
Locale locale = Locale.US;
String dateStr = "17/Mar/2003 11:30:51";
SimpleDateFormat frm = new SimpleDateFormat("dd/MMM/yyyy HH:mm:ss", locale);
Date date = frm.parse(dateStr);

SimpleDateFormat frm1 = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss", locale);
System.out.println("reformat : " + frm1.format(date));


程序正常了……
问题主要就是出在我们在不同环境底下对一些国际化处理上面的不小心或者容易忽略的地方
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值