今天在解析apache usertrack模塊產(chǎn)生的clickstream日志文件時(shí),其中有一個(gè)接收請求的時(shí)間,其格式為:
27/Feb/2008:10:12:44 +0800
在用SimpleDateFormat解析時(shí)始終出錯(cuò).后來的解決辦法:
SimpleDateFormat formatter = new SimpleDateFormat("dd/MMM/yyyy:hh:mm:ss Z", Locale.ENGLISH);
formatter.parse(strDateTime);
這段代碼就可以解析上面的時(shí)間字符串了.
原因是:
1.+0800表示的是時(shí)區(qū)的信息,用Z可以解析
2.Feb這個(gè)月份只有用Locale.ENGLISH才能解析,如果用缺省的new SimpleDateFormat("dd/MMM/yyyy:hh:mm:ss Z"),
這時(shí)解析器使用的是Locale.getDefault(),即Local.Chinese,而Feb在中文里并沒有定義是幾月,所以解析會(huì)出錯(cuò).
如果時(shí)間字符串是"27/一月/2008:10:12:44 +0800",注意英文簡稱的月份已經(jīng)變?yōu)橹形牡脑路?這時(shí)用確認(rèn)的Locale是可以正確解析的.即:
SimpleDateFormat formatter = new SimpleDateFormat("dd/MMM/yyyy:hh:mm:ss Z");
formatter.parse(strDateTime);
或者:
SimpleDateFormat formatter = new SimpleDateFormat("dd/MMM/yyyy:hh:mm:ss Z", Locale.CHINESE);
formatter.parse(strDateTime);