背景问题:
今天在做Excel动态列解析的时候,发现Excel中的日期解析出来居然是这种格式,emmm,这是个啥?
并且发现,通过直接new Date的方式,然后通过SimpleDateFormat格式化后,时间变了?我TM啥东西
通过不懈的百度终于得知了,这个时间是计算机的起始默认时间
在Excel中为 19:00 的单元格,被解析完成后,变成了"Sun Dec 31 19:00:00 CST 1899"
年月日直接变成了1899/12/31
解决方案:
那么这种格式的时间字符串如何正确的格式化为Date呢?
百度后我封装成了一个工具类,拿出来分享
解析工具类
package utils; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; /** * 日期格式化工具类 * @author ZYGisComputer */ public class DateFormatUtil { public static Date parse(String str, String pattern, Locale locale) { if(str == null || pattern == null) { return null; } try { return new SimpleDateFormat(pattern, locale).parse(str); } catch (ParseException e) { e.printStackTrace(); } return null; } public static String format(Date date, String pattern, Locale locale) { if(date == null || pattern == null) { return null; } return new SimpleDateFormat(pattern, locale).format(date); } }
调用类
String date = "Sun Dec 31 19:00:00 CST 1899";
Date parse1 = DateFormatUtil.parse(date, "EEE MMM dd HH:mm:ss zzz yyyy", Locale.US);
String format = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(parse1);
System.out.println(format);
执行结果
1899/12/31 19:00:00
到此日期解析完成!可以发现我们是需要指定时区的,但是我试过换成CHINA时区就会报错[捂脸]
作者:彼岸舞
时间:2020\11\25
内容关于:工作中用到的小技术
本文属于作者原创,未经允许,禁止转发