[02/Dec/2019:12:59:10 +0800]之日期轉換

今天做日誌分析,遇到了一個難題:字符串與日期之間的轉換。

大家都知道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);

結果:
在這裏插入圖片描述
看來這樣是不行的
既然失敗了,就要查資料了,經過一番查找學習,終於找到了方法

  1. +0800表示的是時區的信息,用Z可以解析
  2. 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);

結果也是正確的
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章