Java将时间字符串转成时间

起因


  最近一直在做公司系统批量导入的这一个模块,你们看到的这个Excel是我自己写的工具将原本的html页面转过来的结果,当时也没考虑的那么细,也懒的再回去改。这里看到的时间的格式显然是有点问题的。所以怎么搞呢?我在转换的过程中加了一道来处理时间。

实现

时间字符串格式转换成时间:

    /**
     * 解析时间字符串 类似 20170404171636 / 20170404 这两种特殊格式
     * @param dateString 传入一个时间段字符串
     * @return 格式正确则返回对应的java.util.Date对象 格式错误返回null
     */
    public static Date stringDate2Date(String dateString) {
        // 科学计数法数据转为字符串
        try {
            int len = dateString.length();
            if (len == 8) {
                // dateString = 20170404
                SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
                return sdf.parse(dateString);
            } else if (len == 14) {
                // dateString = 20170404171636
                SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
                return sdf.parse(dateString);
            }
        } catch (Exception e) {
        }
        return null;
    }

  分別以时间字符串:2017040417163620170404 为例,输出结果为:

Tue Apr 04 17:16:36 GMT+08:00 2017
Tue Apr 04 00:00:00 GMT+08:00 2017

科学计数法时间字符串格式转换成时间:

    /**
     * 解析时间字符串 类似 2.01704031349E13
     * @param dateString 传入一个时间段字符串
     * @return 格式正确则返回对应的java.util.Date对象 格式错误返回null
     */
    public static Date bigDecimalStringDate2Date(String dateString) {
        try {
            // 科学计数法数据转为字符串
            BigDecimal bd = new BigDecimal(dateString);
            dateString = bd.toPlainString();

            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
            return sdf.parse(dateString);
        } catch (Exception e) {
        }
        return null;
    }

  以时间字符串:2.01704031349E13 为例,输出结果为:

Mon Apr 03 13:49:00 GMT+08:00 2017

上述几种方式整合:

  这里整合我就用其他的时间处理工具类,不使用上述中的 SimpleDateFormat,下面是这个时间处理工具类的 maven 地址:

        <!-- 时间处理工具类 -->
        <dependency>
            <groupId>joda-time</groupId>
            <artifactId>joda-time</artifactId>
            <version>2.9.4</version>
        </dependency>

  自定义的格式化日期时间字符串的方法:

    /**
     * 格式化日期时间字符串
     * @param dateString 日期时间字符串
     * @param pattern    模式
     * @return Date对象
     */
    public static Date formatDateString(String dateString, String pattern) {
        try {
            DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern(pattern);
            return dateTimeFormatter.parseDateTime(dateString).toDate();
        } catch (Exception e) {
            return null;
        }
    }

  整合处理上述几种情况时间字符串的新方法:

    /**
     * 解析时间字符串 类似 2.01704031349E13 / 20170404171636 / 20170404 这两种特殊格式
     * @param dateString 传入一个时间段字符串
     * @return 格式正确则返回对应的java.util.Date对象 格式错误返回null
     */
    public static Date formatDateString2Date(String dateString) {
        if (dateString.contains("E")) {
            // 科学计数法数据转为字符串
            BigDecimal bd = new BigDecimal(dateString);
            dateString = bd.toPlainString();
        }
        int len = dateString.length();
        try {
            if (len == 8) {
                // dateString = 20170404
                return formatDateString(dateString, "yyyyMMdd");
            } else if (len == 14) {
                // dateString = 20170404171636
                return formatDateString(dateString, "yyyyMMddHHmmss");
            }
        } catch (Exception e) {
        }
        return null;
    }

  结果自行测试。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值