今天做日誌分析,遇到了一個難題:字符串與日期之間的轉換。
大家都知道Java要用SimpleDateFormat來轉換,在學習Java日期轉換的時候日期字符串都是2019-12-24 16:23:52
或者12/24/2019 16:23:52
格式的,但是日誌中一部不是這種格式。
這次在日誌中遇到了這種格式:02/Dec/2019:12:59:10 +0800
,剛開是看見有點懵,月份不是數字而是字符,不管怎麼說還是要先嚐試一下。
當然還是要用SimpleDateFormat來轉換,代碼如下:
String str = "02/Dec/2019:12:59:10 +0800";
SimpleDateFormat sdf = new SimpleDateFormat("dd/MMM/yyyy:HH:mm:ss Z +0800");
Date parse = sdf.parse(str);
System.out.println(parse);
結果:
看來這樣是不行的
既然失敗了,就要查資料了,經過一番查找學習,終於找到了方法
- +0800表示的是時區的信息,用Z可以解析
- Dec這個月份只有用Locale.ENGLISH才能解析,如果new SimpleDateFormat(“dd/MMM/yyyy:hh:mm:ss Z”),這時解析器使用的是Locale.getDefault(),即Local.Chinese,所以解析會出錯
代碼如下:
String str = "02/Dec/2019:12:59:10 +0800";
SimpleDateFormat sdf = new SimpleDateFormat("dd/MMM/yyyy:HH:mm:ss Z", Locale.ENGLISH);
Date parse = sdf.parse(str);
System.out.println(parse);
結果:
這樣就可以了
不過還是想試一下中文,如02/三月/2019:8:29:10 +0800
String str = "02/三月/2019:8:29:10 +0800";
//默認使用的是Locale.getDefault(),即Local.Chinese,可是省略,也可以加上
SimpleDateFormat sdf = new SimpleDateFormat("dd/MMM/yyyy:HH:mm:ss Z");
Date parse = sdf.parse(str);
System.out.println(parse);
結果也是正確的