Java SimpleDateFormat 与 locale (以及 Mac OS X 更改语言)

遇到一个非常怪异的问题,Tomcat 里面有个 servlet 用 SimpleDateFormat 解析日期的,类似这样:

DateFormat formatter = new SimpleDateFormat("dd-MMM-yyyy");
formatter.parse("05-Jan-2012")

但是会抛出 ParseException – Unparseable date “05-Jan-2012”.

我仔细看了看,似乎一切都是对的,不应该出错。于是写一个最简单的测试类,main 函数就这么两行,同一台机器上运行完全正常。更纳闷了。

最后在 servlet 代码里打出 formatter.format(new Date()) 的结果,发现是 “29-二月-2012”!

这才想起我最早拿到这台 MacBook Pro 时系统是中文,我改成英文但是登录界面等少数地方还是中文。不知道 Tomcat 是怎么设置的 locale,不过这里有人在 Windows 上遇到同样的问题,可以通过指定 java 参数解决。

但是苹果恰好有一个文档:Mac OS X: How to change the language displayed in the login window!看起来,我在 System Preferences 里修改的只是我当前用户的 locale,而我启动 tomcat 的时候,使用了 sudo——root 的 locale 仍然是中文?

不管怎么样,既然有了这么专业的文档,照做就是了。不过苹果给的第一种解决办法太让人无语了:

Reinstall Mac OS X and select the desired language during installation

正常做法是在 Terminal 里执行 sudo languagesetup,挑选想要的语言即可。

P.S. SimpleDateFormat 是有个 constructor 可以指定 locale 的。

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *

Time limit is exhausted. Please reload CAPTCHA.