tl; dr
A abordagem moderna usa as 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
Evite classes de data e hora herdadas
A maneira moderna é com as classes java.time. As antigas classes de data e hora, como as Calendar
que provaram ser mal projetadas, confusas e problemáticas.
Defina um formatador personalizado para corresponder à sua entrada de sequência.
String input = "Mon Mar 14 16:02:37 GMT 2011";
DateTimeFormatter f = DateTimeFormatter.ofPattern( "E MMM d HH:mm:ss z uuuu" );
Analisar como um ZonedDateTime
.
ZonedDateTime zdt = ZonedDateTime.parse( input , f );
Você está interessado no ano e no mês. As classes java.time incluem YearMonth
classe para esse fim.
YearMonth ym = YearMonth.from( zdt );
Você pode interrogar os números do ano e do mês, se necessário.
int year = ym.getYear();
int month = ym.getMonthValue();
Mas o toString
método gera uma sequência no formato ISO 8601 padrão.
String output = ym.toString();
Coloque tudo isso junto.
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();
Despejar no console.
System.out.println( "input: " + input );
System.out.println( "zdt: " + zdt );
System.out.println( "ym: " + ym );
entrada: segunda-feira 14 de março 16:02:37 GMT 2011
zdt: 2011-03-14T16: 02: 37Z [GMT]
ym: 2011-03
Código ao vivo
Veja este código em execução no IdeOne.com .
Conversão
Se você precisar de um Calendar
objeto, poderá converter para um GregorianCalendar
usando novos métodos adicionados às classes antigas.
GregorianCalendar gc = GregorianCalendar.from( zdt );
Sobre java.time
A estrutura java.time é integrada ao Java 8 e posterior. Essas classes suplantar os velhos problemáticos legados aulas de data e hora, como java.util.Date
, Calendar
, e SimpleDateFormat
.
O projeto Joda-Time , agora em modo de manutenção , aconselha a migração para java.time.
Para saber mais, consulte o Tutorial do Oracle . E procure Stack Overflow para muitos exemplos e explicações. A especificação é JSR 310 .
Onde obter as classes java.time?
- Java SE 8 e SE 9 e posterior
- Construídas em.
- Parte da API Java padrão com uma implementação em pacote configurável.
- O Java 9 adiciona alguns recursos e correções menores.
- Java SE 6 e SE 7
- Grande parte da funcionalidade java.time é portada para Java 6 e 7 no ThreeTen-Backport .
- Android
- O projeto ThreeTenABP adapta o ThreeTen-Backport (mencionado acima) para o Android especificamente.
- Consulte Como usar… .
O projeto ThreeTen-Extra estende java.time com classes adicionais. Este projeto é um campo de prova para possíveis adições futuras ao java.time. Você pode encontrar algumas classes úteis aqui, como Interval
, YearWeek
, YearQuarter
, e mais .