2016-08-02 32 views
-1

Wenn ich Debugging durch jeden Schritt, um den Kalender zu initialisieren, ist das Datum korrekt auf 31.07.2016 festgelegt. Aber wenn ich über die Kalendermethode gehe, wird das Datum falsch auf den 02.08.2016 gesetzt. Kann jemand dieses unerwartete Verhalten erklären?unerwartetes Verhalten bei der Verwendung von Kalender in Java eingeben

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

Können Sie Ihren Code geschrieben mit Kommentaren in den Zeilen aktualisieren, bei denen das Datum richtig und falsch? – bradimus

+2

Dies funktioniert korrekt. Und warum nicht ein 'SimpleDateFormat' verwenden ?! – Tunaki

Antwort

1

Sie das Rad neu zu erfinden Verwendung nicht SimpleDateFormat stattdessen als nächstes:

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())); 
} 

Ausgang:

31.07.2016 
+0

Danke! Ich kannte den Typ SimpleDateFormat nicht. – gartenkralle