sql >> Base de Datos >  >> RDS >> Mysql

SimpleDateFormatter.parse da salida en un formato diferente al especificado

No pase fechas como cadenas a su base de datos MySQL. Es mejor, más fácil y más seguro pasar objetos de fecha. Por un lado, lo libera del formato y de cualquier problema de formato. Mejor, pasa instancias de una clase desde java.time , la moderna API de fecha y hora de Java. En su caso, un LocalDateTime lo haré.

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

El LocalDateTime obtenido es:

Simplifiqué un poco su conversión de cadena de época. Usa un long primitivo en minúsculas en lugar de un Long objeto. Estoy usando su zona horaria, Asia/Calcuta, asumiendo que los valores de su base de datos están en esta zona horaria. Las recomendaciones normales son mantener los valores de la base de datos en UTC, al menos si existe alguna posibilidad de que los datos se utilicen alguna vez fuera de su zona horaria. Si desea esto, use esta conversión en lugar de la anterior:

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

Enlace: Tutorial de Oracle:fecha y hora explicando cómo usar java.time .