Como converter uma Seqüência de caracteres de data para uma Data ou Calendário objeto?

StackOverflow https://stackoverflow.com/questions/43802

  •  09-06-2019
  •  | 
  •  

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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top