web-dev-qa-db-fra.com

DatePicker affiche une mauvaise valeur du mois

J'ai un problème dans DatePicker dans Android lorsque j'utilise la méthode getMonth() alors il retournera une mauvaise valeur.

Par exemple:

DatePicker datepicker=new DatePicker();

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

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

Si je sélectionne le 06 août 1987, il reviendra le 6/7/1987

Je pense que c'est une erreur, sinon dites-moi la raison s'il vous plaît.

48
Alok Kumar

Comme décrit dans Android SDK , les mois sont indexés à partir de 0. Cela signifie que août est le mois 8, ou index 7, vous donnant ainsi le résultat correct.

Il suffit d'ajouter 1 à l'index renvoyé par l'API pour obtenir le mois à un index traditionnel.

Bien que ce comportement puisse sembler étrange, il est cohérent avec la classe Java.util.Calendar (bien qu'il ne soit pas cohérent avec joda.time.DateTime).

74
PearsonArtPhoto

Sous Android, lorsque vous sélectionnez une date dans le sélecteur de date, il commence à compter les mois à partir de 0. Ainsi, cela signifie que la valeur du mois renvoyée est toujours mois-1.

Par exemple, si vous sélectionnez août (le 8e mois), il renvoie 8−1 = 7.

Cela signifie que ce que vous devez faire est d'ajouter 1 à la valeur du mois que vous obtenez du DatePicker.

Vous pouvez le faire de cette façon:

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);
31
Mehul Ranpara

Vous pouvez utiliser le code suivant:

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

La raison pour laquelle je peux penser pourquoi cela a été dans Java util est comme suit:

Considérez les jours du 1er au 31 janvier.

Un jour comme le 22 janvier peut être considéré comme mois + 22 jours de cette année. Alors que le 15 février peut être déclaré ainsi: 1 mois + 15 jours de cette année.

De même, le 10 décembre peut être déclaré comme suit: 11 mois + 10 jours de cette année.

Par conséquent, Jan-Dec est appelé 0-11.

3
Kapil Jituri

Il n'y a aucune erreur là-dedans. Le comptage des mois dans la classe Calendar est basé sur zéro. voir ceci.

2
MegaMind