Calendar rightNow = Calendar.getInstance();
String month = String.valueOf(rightNow.get(Calendar.MONTH));
Après l'exécution de l'extrait ci-dessus, le mois prend une valeur de 10 au lieu de 11. Pourquoi?
Calendar rightNow = Calendar.getInstance();
String month = String.valueOf(rightNow.get(Calendar.MONTH));
Après l'exécution de l'extrait ci-dessus, le mois prend une valeur de 10 au lieu de 11. Pourquoi?
Ils commencent à 0 - vérifiez la documentation
Comme l’indiquent les nombreuses réponses: le mois commence par 0.
Voici un conseil: vous devriez utiliser SimpleDateFormat pour obtenir la représentation sous forme de chaîne du mois:
Calendar rightNow = Calendar.getInstance();
java.text.SimpleDateFormat df1 = new java.text.SimpleDateFormat("MM");
java.text.SimpleDateFormat df2 = new java.text.SimpleDateFormat("MMM");
java.text.SimpleDateFormat df3 = new java.text.SimpleDateFormat("MMMM");
System.out.println(df1.format(rightNow.getTime()));
System.out.println(df2.format(rightNow.getTime()));
System.out.println(df3.format(rightNow.getTime()));
Sortie:
11
Nov
November
Remarque: la sortie peut varier, elle est spécifique à la région.
Comme plusieurs personnes l'ont souligné, mois renvoyé par le Calendrier et la Date de classes en Java sont indexés à partir de 0 au lieu de 1. Donc 0 est de janvier et le mois en cours, en novembre, est de 10.
Vous pourriez vous demander pourquoi c'est le cas. Les origines de mensonge avec la norme POSIX fonctions ctime
, gmtime
et localtime
, qui acceptent ou retourner un time_t
de la structure avec les champs suivants (de l'homme 3 ctime):
int tm_mday; /* day of month (1 - 31) */
int tm_mon; /* month of year (0 - 11) */
int tm_year; /* year - 1900 */
Cette API a été copié à peu près exactement dans la Java classe Date en Java 1.0, et à partir de là en grande partie intact dans le Calendrier de la classe en Java 1.1. Soleil fixe la plus flagrante problème quand ils ont introduit le Calendrier – le fait que l'année 2001 dans le calendrier Grégorien a été représenté par la valeur 101 dans leur classe Date. Mais je ne suis pas sûr de savoir pourquoi ils n'ont pas changé le jour et le mois de valeurs pour au moins deux d'être cohérent dans leur indexation, soit à partir de zéro ou un. Cette incohérence et de la relative confusion existe encore en Java (et C) à ce jour.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.