tl; dr
L'approche moderne utilise les classes java.time .
YearMonth.from(
ZonedDateTime.parse(
"Mon Mar 14 16:02:37 GMT 2011" ,
DateTimeFormatter.ofPattern( "E MMM d HH:mm:ss z uuuu" )
)
).toString()
2011-03
Évitez les anciennes classes date-heure
La manière moderne est d'utiliser les classes java.time. Les anciennes classes de date-heure telles que celles-ci se Calendar
sont avérées mal conçues, déroutantes et gênantes.
Définissez un formateur personnalisé pour correspondre à votre entrée de chaîne.
String input = "Mon Mar 14 16:02:37 GMT 2011";
DateTimeFormatter f = DateTimeFormatter.ofPattern( "E MMM d HH:mm:ss z uuuu" );
Analyser comme un fichier ZonedDateTime
.
ZonedDateTime zdt = ZonedDateTime.parse( input , f );
Vous êtes intéressé par l'année et le mois. Les classes java.time incluent une YearMonth
classe à cet effet.
YearMonth ym = YearMonth.from( zdt );
Vous pouvez interroger les numéros de l'année et du mois si nécessaire.
int year = ym.getYear();
int month = ym.getMonthValue();
Mais la toString
méthode génère une chaîne au format standard ISO 8601 .
String output = ym.toString();
Mettez tout cela ensemble.
String input = "Mon Mar 14 16:02:37 GMT 2011";
DateTimeFormatter f = DateTimeFormatter.ofPattern( "E MMM d HH:mm:ss z uuuu" );
ZonedDateTime zdt = ZonedDateTime.parse( input , f );
YearMonth ym = YearMonth.from( zdt );
int year = ym.getYear();
int month = ym.getMonthValue();
Dump dans la console.
System.out.println( "input: " + input );
System.out.println( "zdt: " + zdt );
System.out.println( "ym: " + ym );
entrée: Mon Mar 14 16:02:37 GMT 2011
zdt: 2011-03-14T16: 02: 37Z [GMT]
ym: 2011-03
Code en direct
Voir ce code en cours d'exécution dans IdeOne.com .
Conversion
Si vous devez avoir un Calendar
objet, vous pouvez le convertir en un en GregorianCalendar
utilisant de nouvelles méthodes ajoutées aux anciennes classes.
GregorianCalendar gc = GregorianCalendar.from( zdt );
À propos de java.time
Le framework java.time est intégré à Java 8 et versions ultérieures. Ces classes supplantent les anciens gênants hérités des classes date-heure tels que java.util.Date
, Calendar
, et SimpleDateFormat
.
Le projet Joda-Time , désormais en mode maintenance , conseille la migration vers java.time.
Pour en savoir plus, consultez le didacticiel Oracle . Et recherchez Stack Overflow pour de nombreux exemples et explications. La spécification est JSR 310 .
Où obtenir les classes java.time?
- Java SE 8 et SE 9 et versions ultérieures
- Intégré.
- Partie de l'API Java standard avec une implémentation groupée.
- Java 9 ajoute quelques fonctionnalités et corrections mineures.
- Java SE 6 et SE 7
- Une grande partie de la fonctionnalité java.time est rétroportée vers Java 6 et 7 dans ThreeTen-Backport .
- Android
Le projet ThreeTen-Extra étend java.time avec des classes supplémentaires. Ce projet est un terrain d'essai pour d'éventuels futurs ajouts à java.time. Vous trouverez peut - être des classes utiles ici, comme Interval
, YearWeek
, YearQuarter
et plus .