Spring Tool Suite(簡稱STS)針對SimpleDateFormat.pase函數的實參值不作檢驗,異常直接默認值之

      Spring Tool Suite(簡稱STS)是 Spring 團隊開發的一款基於Eclipse的IDE,旨在簡化開發Spring MVC 應用的流程。能夠自動生成spring相關的配置文件。好比applicationContext.xml文件等。可是近來使用 Calendar日曆類進行比較日期時,發現before、after函數不能輸出預期的結果,因而逐一翻看Calendar源碼:java

public boolean before(Object when) {spring

        return when instanceof Calendar
            && compareTo((Calendar)when) < 0; app

    }
函數

可是仍是沒留意到 when instanceof Calendar 這條code。最後決定使用最底層的邏輯:比較getTimeInMillis 。帶回家再找緣由。測試

      後來翻看API文檔才注意到當且僅當 when 是Calendar實例時纔會返回true。ui

     可是這中間暴露了STS的一個bug。測試代碼如:code

    @Test
    public void testCalendar(){
        String pattern1 = "YYYY-MM-dd";
        String pattern2 = "yyyy-MM-dd";

        SimpleDateFormat format = new SimpleDateFormat(pattern1);
        Date theD = null ;
        try {
            theD = format.parse("2013-10-10");
        } catch (ParseException e) {
            e.printStackTrace();
        }
        Calendar theC = Calendar.getInstance() ;
        theC.setTime(theD);
        Calendar now = Calendar.getInstance() ;
        System.out.println("theC : "+theC.getTime());
        System.out.println("theC : "+theC.getTimeInMillis());
        System.out.println("new : "+now.getTime());
        System.out.println("new : "+now.getTimeInMillis());
        System.out.println("new is before theC : "+now.before(theC));
    }
orm

   正確狀況下贏輸出:xml

theC : Wed Jan 10 00:10:00 CST 3
theC : -62071948200000
new : Tue Sep 10 22:22:15 CST 2013
new : 1378822935807
new is before theC : false

可是實際狀況確實ip

theC : Sun Dec 30 00:00:00 CST 2012
theC : 1356796800000
new : Tue Sep 10 22:31:28 CST 2013
new : 1378823488012
new is before theC : false
能夠看到 theC變成了 2012年10月30號

    不論吧pase函數內的實參修改爲何值最後輸出的都是 10月30號。無果,以後更換IDE。打開傳統的myEclipse,Ctrl+C複製黏貼代碼。奇蹟出現:

直接拋出java.lang.IllegalArgumentException: Illegal pattern character 'Y',原來pattern1格式錯誤應爲pattern2.可是萬惡的STS居然沒有拋出任何異常,直接默認爲了10月30號。

    看了成熟IDE環境很重要啊。。。   

相關文章
相關標籤/搜索