tl; dr
L'approccio moderno utilizza le classi 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
Evita le classi di data e ora legacy
Il modo moderno è con le classi java.time. Le vecchie classi di data e ora come si Calendar
sono dimostrate mal progettate, confuse e problematiche.
Definire un formattatore personalizzato in modo che corrisponda all'input della stringa.
String input = "Mon Mar 14 16:02:37 GMT 2011";
DateTimeFormatter f = DateTimeFormatter.ofPattern( "E MMM d HH:mm:ss z uuuu" );
Analizza come a ZonedDateTime
.
ZonedDateTime zdt = ZonedDateTime.parse( input , f );
Sei interessato all'anno e al mese. Le classi java.time includono la YearMonth
classe a tale scopo.
YearMonth ym = YearMonth.from( zdt );
Puoi interrogare per i numeri di anno e mese se necessario.
int year = ym.getYear();
int month = ym.getMonthValue();
Ma il toString
metodo genera una stringa in formato ISO 8601 standard .
String output = ym.toString();
Metti tutto insieme.
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();
Scarica alla console.
System.out.println( "input: " + input );
System.out.println( "zdt: " + zdt );
System.out.println( "ym: " + ym );
input: lun 14 mar 16:02:37 GMT 2011
zdt: 2011-03-14T16: 02: 37Z [GMT]
ym: 2011-03
Codice live
Vedi questo codice in esecuzione su IdeOne.com .
Conversione
Se è necessario disporre di un Calendar
oggetto, è possibile convertire in un GregorianCalendar
nuovo metodo aggiunto alle vecchie classi.
GregorianCalendar gc = GregorianCalendar.from( zdt );
Informazioni su java.time
Il framework java.time è integrato in Java 8 e versioni successive. Queste classi soppiantare la vecchia fastidiosi legacy classi data-time come java.util.Date
, Calendar
, e SimpleDateFormat
.
Il progetto Joda-Time , ora in modalità manutenzione , consiglia la migrazione a java.time.
Per saperne di più, consulta il tutorial Oracle . E cerca Stack Overflow per molti esempi e spiegazioni. La specifica è JSR 310 .
Dove ottenere le classi java.time?
Il progetto ThreeTen-Extra estende java.time con classi aggiuntive. Questo progetto è un banco di prova per possibili aggiunte future a java.time. Si possono trovare alcune classi utili, come per esempio Interval
, YearWeek
, YearQuarter
e altro .