"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Por que SimpleDateFormat.parse gera uma saída diferente da especificada ao converter carimbos de data/hora UNIX em datas?

Por que SimpleDateFormat.parse gera uma saída diferente da especificada ao converter carimbos de data/hora UNIX em datas?

Publicado em 2024-11-09
Navegar:627

Why does SimpleDateFormat.parse output differently than specified when converting UNIX timestamps to dates?

SimpleDateFormatter.parse gera saídas diferentes das especificadas

Ao converter carimbos de data/hora UNIX em datas usando SimpleDateFormat, você pode encontrar discrepâncias entre o formato especificado e o saída.

No exemplo dado, o objetivo é converter um carimbo de data/hora UNIX ("a1527069600") para uma data no formato "dd/MM/yyyy hh:mm:ss a". No entanto, usar SimpleDateFormatter.format seguido por SimpleDateFormatter.parse produz uma saída diferente.

Causa da discrepância

A discrepância ocorre porque SimpleDateFormatter.parse espera uma string no exato formato especificado durante a instanciação ("dd/MM/yyyy hh:mm:ss a"). Nesse caso, SimpleDateFormatter.format gera a data em um formato diferente do formato de entrada esperado, causando falha na operação de análise.

Solução

Para evitar esse problema , é recomendado não passar strings de data para bancos de dados MySQL. Em vez disso, use objetos de data. A moderna API de data e hora Java, java.time, fornece classes como LocalDateTime que facilitam o tratamento de datas.

Exemplo:

String ep = "a1527069600";
long epoch = Long.parseLong(ep.substring(1));
Instant inst = Instant.ofEpochSecond(epoch);
LocalDateTime ldt = inst.atZone(ZoneId.of("Asia/Calcutta")).toLocalDateTime();

System.out.println(ldt.toString()); // Output: 2018-05-23T15:30

PreparedStatement ps = myDatabaseConnection.prepareStatement(
        "insert into my_table (my_date_time) values (?)");
ps.setObject(1, ldt);

Este código converte o timestamp UNIX em um LocalDateTime, que pode ser inserido diretamente no banco de dados MySQL.

Conclusão:

Ao utilizar java.time e passar objetos de data em vez de strings para o MySQL, você pode eliminar problemas de formatação e garantir a precisão da conversão de data.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3