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

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

  • 相关阅读:
    第二阶段站立会议第三天
    第二阶段站立会议第二天
    第二阶段站立会议第一天
    测试计划
    cnblogs用户体验及建议
    第一阶段绩效评估
    第一阶段各组意见回复
    第一阶段团队评价
    站立会议第十天
    站立会议第九天
  • 原文地址:https://www.cnblogs.com/binblog/p/4026942.html
Copyright © 2011-2022 走看看