"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Por qué SimpleDateFormat.parse genera un resultado diferente al especificado al convertir marcas de tiempo UNIX en fechas?

¿Por qué SimpleDateFormat.parse genera un resultado diferente al especificado al convertir marcas de tiempo UNIX en fechas?

Publicado el 2024-11-09
Navegar:994

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

SimpleDateFormatter.parse genera resultados diferentes a los especificados

Al convertir marcas de tiempo UNIX en fechas usando SimpleDateFormat, puede encontrar discrepancias entre el formato especificado y el salida.

En el ejemplo dado, el objetivo es convertir una marca de tiempo UNIX ("a1527069600") a una fecha en el formato "dd/MM/aaaa hh:mm:ss a". Sin embargo, usar SimpleDateFormatter.format seguido de SimpleDateFormatter.parse produce un resultado diferente.

Causa de la discrepancia

La discrepancia se produce porque SimpleDateFormatter.parse espera una cadena exactamente formato especificado durante la creación de instancias ("dd/MM/aaaa hh:mm:ss a"). En este caso, SimpleDateFormatter.format genera la fecha en un formato diferente al formato de entrada esperado, lo que provoca que la operación de análisis falle.

Solución

Para evitar este problema , se recomienda no pasar cadenas de fecha a bases de datos MySQL. En su lugar, utilice objetos de fecha. La moderna API de fecha y hora de Java, java.time, proporciona clases como LocalDateTime que facilitan el manejo de fechas.

Ejemplo:

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 convierte la marca de tiempo UNIX en un LocalDateTime, que se puede insertar directamente en la base de datos MySQL.

Conclusión:

Al utilizar java.time y pasar objetos de fecha en lugar de cadenas a MySQL, puede eliminar problemas de formato y garantizar la precisión de la conversión de fechas.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3