記一次在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也讀進來了。

 

知道這個之后,我相信大家解決辦法也應該很快能找到,這里就不說了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM