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.
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).
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);
Vous pouvez utiliser le code suivant:
String mes = this.datepicker.getMonth()/10==0?("0"+this.datepicker.getMonth()):
String.valueOf(this.datepicker.getMonth());
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.
Il n'y a aucune erreur là-dedans. Le comptage des mois dans la classe Calendar est basé sur zéro. voir ceci.