遇到一个非常怪异的问题,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 的。
Leave a Reply