Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

SimpleDateFormatter.parse dando saída em formato diferente do especificado


Não passe datas como strings para seu banco de dados MySQL. É melhor, mais fácil e seguro passar objetos de data. Por um lado, alivia a formatação e quaisquer problemas de formatação. Melhor, passe instâncias de uma classe de java.time , a moderna API de data e hora Java. No seu caso, um LocalDateTime vai fazer.
    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);

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

O LocalDateTime obtido é:

Eu simplifiquei um pouco sua conversão da string de época. Use um long primitivo e minúsculo em vez de um Long objeto. Estou usando seu fuso horário, Ásia/Calcutá, supondo que os valores do banco de dados estejam nesse fuso horário. As recomendações normais são manter os valores do banco de dados em UTC, pelo menos se houver alguma possibilidade de que os dados sejam usados ​​fora do seu fuso horário. Se você quiser isso, use esta conversão em vez da acima:
    LocalDateTime ldt = inst.atOffset(ZoneOffset.UTC).toLocalDateTime();

Link: Tutorial Oracle:Data e hora explicando como usar java.time .