27/Feb/2008:10:12:44 +0800這樣的日期格式在java里的解析.
今天在解析apache usertrack模塊產生的clickstream日志文件時,其中有一個接收請求的時間,其格式為:27/Feb/2008:10:12:44 +0800
在用SimpleDateFormat解析時始終出錯.后來的解決辦法:
SimpleDateFormat formatter = new SimpleDateFormat("dd/MMM/yyyy:hh:mm:ss Z", Locale.ENGLISH);
formatter.parse(strDateTime);
這段代碼就可以解析上面的時間字符串了.
原因是:
1.+0800表示的是時區的信息,用Z可以解析
2.Feb這個月份只有用Locale.ENGLISH才能解析,如果用缺省的new SimpleDateFormat("dd/MMM/yyyy:hh:mm:ss Z"),
這時解析器使用的是Locale.getDefault(),即Local.Chinese,而Feb在中文里并沒有定義是幾月,所以解析會出錯.
如果時間字符串是"27/一月/2008:10:12:44 +0800",注意英文簡稱的月份已經變為中文的月份,這時用確認的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);
posted on 2008-02-28 14:17 pony 閱讀(4574) 評論(2) 編輯 收藏 所屬分類: Java