zoukankan      html  css  js  c++  java
  • 记一次在java中的日期parse错误

    String dateString = "2014101517";

    new SimpleDateFormat("yyyyMMddHH").parse(dateString)

    这句代码会产生错误吗?

    答案是:不会。

    这里是直接赋值给dateString一个值,这么解析是不会有问题的。

    但是当这个字符串是来自文件中读取的时候,就要小心了。

    public class ParseError {
    
        /**
         * @param args
         */
        public static void main(String[] args) {
            String file = "d:/res/111.txt";
            try {
                String str = MyReader.readAll(new FileInputStream(file));
                System.out.println(str);
                Date d = new SimpleDateFormat("yyyyMMddHH").parse(str);
                System.out.println(d);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (ParseException e) {
                e.printStackTrace();
            }
        }
    
    }

    像如上一段代码,它的输出是这样的:

    2014101517
    java.text.ParseException: Unparseable date: "2014101517"
        at java.text.DateFormat.parse(DateFormat.java:337)
        at com.dhcc.jcron.ParseError.main(ParseError.java:20)

    百撕不得其姐啊。

    最终,在调试中发现

    这明明是10个字符怎么count是11呢?

    再点开value一看

    第0位是个空的,所以解析就出错了。

    那么这个问题背后的原因是什么呢?

    原来这个文件是格式是UTF-8格式,UTF8带BOM的文件,会在文件头放一个0xefbb。

    但是java中的InputStreamReader将这个bom也读进来了。

    知道这个之后,我相信大家解决办法也应该很快能找到,这里就不说了。

  • 相关阅读:
    归并排序
    快速排序
    UNION与UNION ALL的区别
    聚集索引和非聚集索引
    设计模式之抽象工厂模式
    list中map 的value值时间排序
    webmvc 拦截器 允许跨域 跨域问题 sessionid不一样
    redis 主从复制 和集群
    maven打包
    bcprov-jdk15on包用于创建CSR(证书请求)
  • 原文地址:https://www.cnblogs.com/binblog/p/4026942.html
Copyright © 2011-2022 走看看