Pergunta

A seqüência de caracteres quero formato parecido com este:String datetime = "9/1/10 11:34:35 AM"

Seguinte padrão para SimpleDateFormat funciona:

SimpleDateFormat sdf = SimpleDateFormat("M/d/yy h:mm:ss");
Date d = sdf.parse(datetime);
System.out.println(d);

Output> [Wed Sep 01 11:34:35 CEST 2010]

No entanto, eu preciso analisar o marcador de AM/PM, bem como, e quando devo acrescentar que, para o padrão que eu receber uma exceção.

Padrão que não funcionam:

SimpleDateFormat sdf = SimpleDateFormat("M/d/yy h:mm:ss a");

Eu tentei com este, também, com a mesma exceção:

SimpleDateFormat sdf = SimpleDateFormat("M/d/yy h:mm:ss aa");

Exceção:

java.text.ParseException: Unparseable date: "9/1/10 11:34:35 AM"

Eu olhei através da API http://download.oracle.com/javase/1.4.2/docs/api/java/text/SimpleDateFormat.html#text mas canät parecem encontrar onde eu faço de errado.

Alguma sugestão?

Foi útil?

Solução

Uma possibilidade é que seu padrão Locale tem símbolos diferentes para AM/PM. Ao construir um formato de data, você deve sempre fornecer um Locale A menos que você realmente queira usar o padrão do sistema Locale, por exemplo:

SimpleDateFormat sdf = new SimpleDateFormat("M/d/yy h:mm:ss a", Locale.US)

Outras dicas

Estou tomando um exemplo de data fornecida abaixo e imprimir a data formatada no formato 24 horas, se for adequado ao seu requisito.

 String inputdate="9/1/10 11:34:35 AM";
        SimpleDateFormat simpleDateFormat=new SimpleDateFormat("dd/MM/yy hh:mm:ss aa",Locale.getDefault());
        try {
            System.out.println(""+new SimpleDateFormat("dd/MM/yy HH:mm:ss",Locale.getDefault()).format(simpleDateFormat.parse(inputdate)));

        } catch (ParseException e) {
            e.printStackTrace();
        }

Se você ainda tiver alguma consulta, responda. Obrigado.

Moderno resposta:

    String datetime = "9/1/10 11:34:35 AM";
    LocalDateTime dt = LocalDateTime.parse(datetime, 
            DateTimeFormatter.ofPattern("M/d/yy h:mm:ss a", Locale.ENGLISH));

Isso produz um LocalDateTime de 2010-09-01T11:34:35.Cuidado com anos de dois dígitos, embora; DateTimeFormatter irá assumir 2000 a 2099.Para o meu aniversário este teria sido incorreto.

Ainda precisamos fornecer a localidade.Desde AM/PM marcadores são pouco utilizados na prática em outros idiomas que não o inglês, eu considerados Locale.ENGLISH uma aposta bastante segura.Por favor, coloque o seu próprio.

Outras respostas foram muito bem, respostas em 2010 e 2011.Já em 2014 o texto acima foi válido e eu teria preferido a ele.

Se você estiver trabalhando com o Freemarker para Java e pop sobre esse problema, use o código abaixo. Eu tive esse problema, meu conjunto de localidade AM/PM como DE. Não sei por que ...<#setting locale="en_US">

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