今天做日志分析,遇到了一个难题:字符串与日期之间的转换。
大家都知道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);
结果也是正确的