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也读进来了。

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

  • 相关阅读:
    Python-常用的高级函数
    Excel
    业务思维
    数据分析思维
    Netbeans 12无法打开项目(project的)的问题
    C++ tuple元组
    如何保障一场千万级大型直播?
    回声消除的昨天、今天和明天
    无参考评估在云信的视频测试实践
    一文读懂Python 高阶函数
  • 原文地址:https://www.cnblogs.com/binblog/p/4026942.html
Copyright © 2011-2022 走看看