2010-12-17 12 views
38

Ich habe ein Problem in DatePicker in Android, wenn ich getMonth() Methode verwende, dann wird es einen falschen Wert zurückgeben.DatePicker zeigt falschen Wert des Monats

Zum Beispiel:

DatePicker datepicker=new DatePicker(); 

int day=date.getDayOfMonth(); 
int month=date.getMonth(); 
int year=date.getYear(); 

t.setText(""+day+"/"+month+"/"+year); 

Wenn ich 6. August 1987 wählen wird, dann wird es 1987.06.07

kehre ich denke, dass es ein Fehler ist, wenn nicht mir den Grund sagen, bitte.

+0

können Sie auch Code von http://developer.android.com/resources/tutorials/views/hello-datepicker.html nehmen Es ist sehr einfach. Befolge einfach die angegebenen Schritte. Es klappt. – khushi

Antwort

62

Wie in der Android SDK beschrieben, sind Monate beginnend bei 0 indiziert. Dies bedeutet August ist Monat 8 oder Index 7, so dass Sie das richtige Ergebnis erhalten.

Es ist eine einfache Sache, 1 zum Index zu addieren, der von der API zurückgegeben wird, um den traditionellen ein-indexierten Monat zu erhalten.

Obwohl dieses Verhalten seltsam erscheinen mag, ist es konsistent mit der Klasse java.util.Calendar (obwohl es nicht konsistent mit joda.time.DateTime ist).

+4

Wenn Sie ein Array mit den Namen der Monate haben, möchten Sie, dass die Monate mit Null indiziert werden, damit sie mit diesem Array übereinstimmen. Die Tage haben dieses Problem nicht, eine Zahl ist alles, was irgendjemand erwartet. – PearsonArtPhoto

2

Dies ist kein Fehler. Das Zählen von Monaten in der Kalenderklasse ist nullbasiert. see this.

21

In Android, wenn Sie ein Datum aus der Datumsauswahl wählen, startet er die Monate von 0. So zählt, bedeutet dies, dass der zurückgegebene Monatswert − 1.e

Zum Beispiel immer Monat ist, wählen Sie August (der 8. Monat), dann gibt es 8 − 1 = 8 zurück.

Das bedeutet, dass Sie dem Monatswert, den Sie vom DatePicker erhalten, 1 hinzufügen müssen. Sie können, dass auf diese Weise tun:

DatePicker datepicker = new DatePicker(); 

int day = date.getDayOfMonth(); 
int month = date.getMonth()+1; // here I added 1 to the month 
int year = date.getYear(); 

t.setText(""+day+"/"+month+"/"+year); 
2

Sie können den folgenden Code verwenden:

String mes = this.datepicker.getMonth()/10==0?("0"+this.datepicker.getMonth()): 
String.valueOf(this.datepicker.getMonth()); 
1

Der Grund, warum ich denken kann, warum dies in Java util gewesen ist, wie folgt:

Betrachten Tage vom 1. Januar bis 31. Januar. Ein Tag wie 22. Januar kann als 0 Monat + 22 Tage des Jahres betrachtet werden. Während 15. Februar kann als angegeben werden: 1 Monat + 15 Tage des Jahres.

Ebenso kann 10. Dezember angegeben werden als: 11 Monate + 10 Tage des Jahres.

Daher wird Jan-Dec als 0-11 bezeichnet.