Advertisement

"Sun Dec 31 19:00:00 CST 1899"格式的字符串转Date

阅读量:

背景问题:

今天我在进行Excel动态列解析的过程中,发现了Excel中日期解析出现的格式与预期不同。这让我有些困惑的是……

我发现一个问题:使用new Date()的方法生成日期后,在后续的处理中发现时间字段发生了变化。

通过不懈的百度终于得知了,这个时间是计算机的起始默认时间

在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);
    
     }
    
  
    
 }
    
    
    
    
    AI写代码

调用类

复制代码
    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);
    
    AI写代码

执行结果

复制代码
    1899/12/31 19:00:00
    
    AI写代码

至此日期解析已经完成!能够意识到指定正确的时区至关重要,并且尝试将时间设置为CHINA时区却遇到了错误。

作者:彼岸舞

时间:2020\11\25

内容关于:工作中用到的小技术

本文属于作者原创,未经允许,禁止转发

全部评论 (0)

还没有任何评论哟~