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

背景问题:

今天在做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

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

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

posted @   彼岸舞  阅读(780)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」
点击右上角即可分享
微信分享提示