[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);

结果也是正确的
在这里插入图片描述

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