2016-08-02 56 views
-1

當我通過每個步驟調試以初始化日曆時,日期正確設置爲31.07.2016。但是當我跨過日曆方法時,日期錯誤地設置爲02.08.2016。有人可以解釋這種意外的行爲嗎?在java中使用日曆類型時的意外行爲

import java.util.Calendar; 

public class Test { 

    public static void main(String[] args) 
    { 
     Calendar startCalendar = initializeCalendar("31.07.2016"); 
    } 

    private static Calendar initializeCalendar(String date) 
    { 
     int[] dateValues = extractDate(date); 

     Calendar calendar = createCalendar(); 

     calendar.set(Calendar.DAY_OF_MONTH, dateValues[0]); 
     calendar.set(Calendar.MONTH, dateValues[1]-1); 
     calendar.set(Calendar.YEAR, dateValues[2]); 

     return calendar; 
    } 

    private static Calendar createCalendar() 
    { 
     Calendar calendar = Calendar.getInstance(); 
     calendar.clear(); 

     return calendar; 
    } 

    private static int[] extractDate(String date) 
    { 
     String[] ddmmyyy = date.split("\\."); 

     return new int[]{Integer.parseInt(ddmmyyy[0]), Integer.parseInt(ddmmyyy[1]), Integer.parseInt(ddmmyyy[2])}; 
    } 
} 
+0

你能上線的意見更新您發佈的代碼,其中的日期是正確和不正確? – bradimus

+2

這工作正常。爲什麼不使用'SimpleDateFormat'? – Tunaki

回答

1

不要重新發明輪子使用SimpleDateFormat而不是爲下一個:

public static void main(String[] args) throws ParseException { 
    // Define the corresponding format 
    SimpleDateFormat format = new SimpleDateFormat("dd.MM.yyyy"); 
    Calendar startCalendar = Calendar.getInstance(); 
    // Parse "31.07.2016" and set the resulting date to the calendar instance 
    startCalendar.setTime(format.parse("31.07.2016")); 
    // Print the formatted date 
    System.out.println(format.format(startCalendar.getTime())); 
} 

輸出:

31.07.2016 
+0

謝謝!不知道SimpleDateFormat類型。 – gartenkralle