Eu sou novo em Java, geralmente trabalho com PHP.
Estou tentando converter esta seqüência de caracteres:
Seg 14 de março 16:02:37 GMT 2011
Em um objeto de calendário para que eu possa facilmente puxar o ano e o mês assim:
String yearAndMonth = cal.get(Calendar.YEAR)+cal.get(Calendar.MONTH);
Seria uma má ideia analisá-lo manualmente? Usando um método de substring?
Qualquer conselho ajudaria obrigado!
Respostas:
nota: defina de
Locale
acordo com o seu ambiente / requisitoVeja também
fonte
java.time
. Esta pergunta / pergunta aparece bastante proeminente no google.tl; dr
A abordagem moderna usa as classes java.time .
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.
Analisar como um
ZonedDateTime
.Você está interessado no ano e no mês. As classes java.time incluem
YearMonth
classe para esse fim.Você pode interrogar os números do ano e do mês, se necessário.
Mas o
toString
método gera uma sequência no formato ISO 8601 padrão.Coloque tudo isso junto.
Despejar no console.
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 umGregorianCalendar
usando novos métodos adicionados às classes antigas.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
, eSimpleDateFormat
.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?
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 .fonte
Bem, acho que seria uma má idéia replicar o código que já está presente em classes como
SimpleDateFormat
.Por outro lado, pessoalmente, sugiro evitar
Calendar
e,Date
se possível, e usar o Joda Time como uma API de data e hora muito melhor projetada. Por exemplo, você precisa estar ciente de que nãoSimpleDateFormat
é seguro para threads, portanto, você precisa de locais de threads, sincronização ou uma nova instância sempre que usá-lo. Os analisadores e formatadores Joda são seguros para threads.fonte
java.time
é o caminho a seguir, Basil Bourque deu uma excelente resposta.Nenhum novo Calendário precisa ser criado, o SimpleDateFormat já usa um Calendário embaixo.
(Ainda não posso comentar, foi por isso que criei uma nova resposta)
fonte
SimpleDateFormat
é ótimo, observe queHH
é diferente dehh
quando se trabalha com horas.HH
retornará 24 horas por dia e hh retornará 12 horas.Por exemplo, o seguinte retornará 12 horas:
Enquanto isso retornará 24 horas:
fonte
Analisar uma hora com o fuso horário,
Z
no padrão, é para o fuso horárioSaída: retornará a hora UTC
Se não definirmos o fuso horário como padrão
yyyy-MM-dd'T'HH:mm:ss
.SimpleDateFormat
usará o fuso horário definido emSetting
fonte
Sim, seria uma prática ruim analisá-lo você mesmo. Dê uma olhada no SimpleDateFormat , ele transformará a String em uma data e você poderá definir a data em uma instância do calendário.
fonte
Método simples:
fonte