Como converter uma Seqüência de caracteres de data para uma Data ou Calendário objeto?
Pergunta
Eu tenho um String
representação de uma data que eu preciso para criar um Date
ou Calendar
objeto partir.Eu olhei através do Date
e Calendar
APIs mas não encontrei nada que possa fazê-lo diferente de criar a minha própria feio método de análise.Eu sei que deve haver uma maneira, alguém sabe de uma solução?
Solução
Em breve:
DateFormat formatter = new SimpleDateFormat("MM/dd/yy");
try {
Date date = formatter.parse("01/29/02");
} catch (ParseException e) {
e.printStackTrace();
}
Ver SimpleDateFormat
javadoc para mais.
E para transformá-lo em um Calendar
, o que fazer:
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
Outras dicas
tl;dr
LocalDate.parse( "2015-01-02" )
o java.horário
Java 8 e, mais tarde, tem um novo o java.horário quadro que faz com que essas outras respostas fora de moda.Este quadro é inspirado Joda-Time, definido por JSR 310, e prorrogado pelo ThreeTen-Extra projeto.Ver o Tutorial.
O antigo pacote de classes java.util.Data/.Calendário, são extremamente problemático e confuso.Evitá-los.
LocalDate
Como Joda-Time, java.o tempo tem uma classe LocalDate
para representar uma data-valor apenas sem tempo-de-dia e, sem que o fuso horário.
ISO 8601
Se a sua seqüência de caracteres de entrada é padrão ISO 8601 formato de yyyy-MM-dd
, você pode solicitar que classe, diretamente a analisar a cadeia, sem a necessidade de especificar um formatador.
A ISO 8601 formatos são usados por padrão em java.tempo, tanto para a análise e a geração de representações de string de data-hora de valores.
LocalDate localDate = LocalDate.parse( "2015-01-02" );
Formatador
Se você tem um formato diferente, especifique um formatador de o java.em tempo.formato pacote.Você pode especificar o seu próprio padrão de formatação ou deixar de java.hora automaticamente localizar conforme apropriado para um Locale
a especificação de uma linguagem humana para a tradução e normas culturais para decidir questões como o período versus vírgula.
Padrão de formatação
Leia o DateTimeFormatter
classe doc para obter detalhes sobre os códigos utilizados no formato padrão.Eles variam um pouco da antiga envelhecida java.text.SimpleDateFormat
classe de padrões.
Note-se como o segundo argumento para o parse
o método é um método de referência, sintaxe adicionado para o Java 8 e versões posteriores.
String input = "January 2, 2015";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern ( "MMMM d, yyyy" , Locale.US );
LocalDate localDate = LocalDate.parse ( input , formatter );
Dump para o console.
System.out.println ( "localDate: " + localDate );
localDate:2015-01-02
Localizar automaticamente
Ou, em vez de especificar um padrão de formatação, deixe java.horário de localizar para você.Chamada DateTimeFormatter.ofLocalizedDate
, e certifique-se de especificar o desejado/esperado Locale
em vez de confiar na JVM atual padrão que podem ser alterados a qualquer momento durante o tempo de execução(!).
String input = "January 2, 2015";
DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDate ( FormatStyle.LONG );
formatter = formatter.withLocale ( Locale.US );
LocalDate localDate = LocalDate.parse ( input , formatter );
Dump para o console.
System.out.println ( "input: " + input + " | localDate: " + localDate );
entrada:2 de janeiro de 2015 | localDate:2015-01-02
O altamente considerado Joda biblioteca de Tempo de também vale a pena uma olhada.Esta é a base para o novo data e hora de api que é pencilled para o Java 7.O design é elegante, intuitivo, bem documentado e evita um monte de imperícia do original java.util.Date
/ java.util.Calendar
classes.
Joda do DateFormatter
pode analisar uma Cadeia de caracteres para uma Joda DateTime
.
Tente isso:
DateFormat.parse(String)
O DateFormat
a classe tem um parse
o método.
Ver http://java.sun.com/j2se/1.4.2/docs/api/java/text/DateFormat.html para obter mais informações.