2013-01-11 87 views
1

我有以下代碼。獲取該月份時出現問題。它說''月'參數必須在1到12的範圍內。「它總是返回0.爲什麼?分析日期錯誤

String target = "2013-01-04"; 
    DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); 
    Date date = df.parse(target); 

    Calendar cal = Calendar.getInstance(); 
    cal.setTime(date); 
    int year = cal.get(Calendar.YEAR); 
    System.out.println("year-"+year); 
    int month = cal.get(Calendar.MONTH); 
    System.out.println("month-"+month); 
    int day = cal.get(Calendar.DAY_OF_MONTH); 
    System.out.println("day-"+day); 
+0

閱讀javadoc ...月份基於0(即1月= 0,12月= 11)。 – mre

+0

好的謝謝。所以我應該每次都加1。 – jantox

+0

如果你真的想..我不是編寫代碼的人。 – mre

回答

5

這是Calendar類的怪癖。出於某種瘋狂的原因,即使所有其他日期部分都基於一個月,它也會使用從零開始的月份索引。

甚至不要考慮提出這個問題,因爲你會加入一行很長的人:日曆可以說是JDK中最破碎的類。

「修復」是使用jodatime library,這對您所有的日期操作,解析和格式化需求都很有用。現在幾乎是行業標準。