Comment obtenir le mois d'une date en Java:
DateFormat inputDF = new SimpleDateFormat("mm/dd/yy");
Date date1 = inputDF.parse("9/30/11");
Calendar cal = Calendar.getInstance();
cal.setTime(date1);
int month = cal.get(Calendar.MONTH);
int day = cal.get(Calendar.DAY_OF_MONTH);
int year = cal.get(Calendar.YEAR);
System.out.println(month+" - "+day+" - "+year);
Ce code renvoie le jour et l'année mais pas le mois.
sortie:
0 - 30 - 2011
En effet, votre format est incorrect: vous avez besoin de "MM/dd/yy"
pour le mois, car "mm"
correspond aux minutes:
DateFormat inputDF = new SimpleDateFormat("MM/dd/yy");
Date date1 = inputDF.parse("9/30/11");
Calendar cal = Calendar.getInstance();
cal.setTime(date1);
int month = cal.get(Calendar.MONTH);
int day = cal.get(Calendar.DAY_OF_MONTH);
int year = cal.get(Calendar.YEAR);
System.out.println(month+" - "+day+" - "+year);
Imprime 8 - 30 - 2011
(car les mois sont basés sur zéro; démo )
Premièrement, vous avez utilisé mm
dans votre format de date, qui est "minutes" selon les Javadocs . Vous définissez les minutes sur 9
, pas le mois. Il semble que le mois par défaut est 0 (janvier).
Utilisez MM
(capital 'M's) pour analyser le mois. Ensuite, vous verrez 8
, car dans Calendar
mois commencent par 0, pas 1 . Ajoutez 1
pour récupérer le 9
souhaité.
Le premier mois de l'année dans les calendriers grégorien et julien est JANVIER qui est 0
// MM is month, mm is minutes
DateFormat inputDF = new SimpleDateFormat("MM/dd/yy");
et ensuite
int month = cal.get(Calendar.MONTH) + 1; // To shift range from 0-11 to 1-12
Si vous lisez le SimpleDateFormat
javadoc , vous remarquerez que mm
dure quelques minutes. Vous avez besoin de MM
par mois.
DateFormat inputDF = new SimpleDateFormat("MM/dd/yy");
Sinon, le format ne lit pas un champ month
et prend la valeur 0
.
Temps pour quelqu'un de fournir la réponse moderne. Les autres réponses étaient bonnes lorsque la question a été posée en 2013 et sont toujours correctes. Aujourd'hui, rien ne vous empêche de lutter avec l'ancienne classe SimpleDateFormat
à la fois obsolète et notoirement gênante. Java.time
, l'API Java moderne pour la date et l'heure, est beaucoup plus agréable à utiliser:
DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern("M/d/yy");
LocalDate date1 = LocalDate.parse("9/30/11", inputFormatter);
System.out.println(date1);
Cette imprime
2011-09-30
La classe LocalDate
représente une date sans heure, exactement ce dont vous avez besoin, elle correspond à votre besoin beaucoup plus précisément que les anciennes classes Date
et Calendar
.
Les chaînes de modèle de format utilisées avec DateTimeFormatter
ressemblent à celles de SimpleDateFormat
, il existe quelques différences. Vous pouvez utiliser MM
majuscule pour exiger un mois à deux chiffres (09, par exemple, septembre) ou une seule variable M
pour permettre l'écriture du mois avec un ou deux chiffres. De même dd
ou d
pour le jour du mois. yy
indique une année à deux chiffres et est interprété avec la base 2000, c’est-à-dire entre 2000 et 2099 inclus (cela ne fonctionnerait pas pour mon anniversaire).
Link: Tutoriel Oracle Trail: Date Time expliquant comment utiliser Java.time
.
Le format du mois devrait être MM
au lieu de mm
DateFormat inputDF = new SimpleDateFormat("MM/dd/yy");
mm
isans minutes, utilisez MM
en spécifiant le format.
Calendar cal = Calendar.getInstance();
cal.setTime(date1);
int month = cal.get(Calendar.MONTH);// returns month value index starts from 0
Essayez comme ceci en utilisant MM
au lieu de mm
: -
DateFormat inputDF = new SimpleDateFormat("MM/dd/yy");
Date date1 = inputDF.parse("9/30/11");
Calendar cal = Calendar.getInstance();
cal.setTime(date1);
int month = cal.get(Calendar.MONTH);
int day = cal.get(Calendar.DAY_OF_MONTH);
int year = cal.get(Calendar.YEAR);
System.out.println(month+" - "+day+" - "+year);
Le mois imprimé sera 8 car l'index commence à 0
ou essayez avec: -
int month = cal.get(Calendar.MONTH) + 1;