Mysql
 sql >> Database >  >> RDS >> Mysql

SimpleDateFormatter.parse fornisce un output in un formato diverso da quello specificato

Non passare le date come stringhe al tuo database MySQL. È meglio, sia più facile che più sicuro passare oggetti data. Per prima cosa, ti solleva dalla formattazione e da eventuali problemi di formattazione. Meglio, passa le istanze di una classe da java.time , la moderna API di data e ora Java. Nel tuo caso un LocalDateTime lo farà.

    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);

Il LocalDateTime ottenuto è:

Ho semplificato un po' la tua conversione da epoch string. Usa una primitiva, minuscola long piuttosto che un Long oggetto. Sto usando il tuo fuso orario, Asia/Calcutta, supponendo che i valori del tuo database si trovino in questo fuso orario. I normali consigli sono di mantenere i valori del database in formato UTC, almeno se esiste la possibilità che i dati vengano mai utilizzati al di fuori del tuo fuso orario. Se vuoi questo, usa questa conversione invece di quella sopra:

    LocalDateTime ldt = inst.atOffset(ZoneOffset.UTC).toLocalDateTime();

Link: Tutorial Oracle:data e ora spiegando come usare java.time .