es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Java: convertir una marca de tiempo a una fecha y volver a convertirla en marca de tiempo cambia la fecha En Java, para convertir una marca de tiempo a una fecha, puedes utilizar la clase `java.util.Date`. A continuación, te mostraré cómo hacerlo: “`java // Importar las clases necesarias import java.sql.Timestamp; import java.util.Date; // Crear una marca de tiempo Timestamp timestamp = new Timestamp(System.currentTimeMillis()); // Convertir la marca de tiempo a una fecha Date fecha = new Date(timestamp.getTime()); // Imprimir la fecha resultante System.out.println(“Fecha convertida: ” + fecha); // Luego, si deseas volver a convertir la fecha en una marca de tiempo, puedes hacerlo de la siguiente manera: // Crear una nueva marca de tiempo a partir de la fecha Timestamp nuevoTimestamp = new Timestamp(fecha.getTime()); // Imprimir la nueva marca de tiempo System.out.println(“Nueva marca de tiempo: ” + nuevoTimestamp); “` Ten en cuenta que la conversión de una marca de tiempo a una fecha y viceversa puede resultar en cambios en la fecha y/u hora debido a la representación y precisión de los valores. Espero que esto te sea útil para tus traducciones de documentos relacionados con IT. Si tienes alguna otra consulta, estaré encantado de ayudarte.

Estoy creando una cadena a partir del tiempo actual y quiero convertirla nuevamente en marca de tiempo, pero el problema es que resta 2 horas al convertirlo.

Estos son los pasos que estoy siguiendo:

DateTimeFormatterBuilder dateTimeFormatterBuilder = new DateTimeFormatterBuilder().append(DateTimeFormatter.ofPattern("uuuu-MM-dd")).appendLiteral(" ")
                .append(DateTimeFormatter.ofPattern("HH:mm:ss")).parseLenient();
long ts = Clock.systemUTC().millis();
System.out.println(ts);
Instant instant = Instant.ofEpochMilli(ts);
ZonedDateTime zonedDateTime = ZonedDateTime.ofInstant(instant, ZoneOffset.UTC);
String str = zonedDateTime.format(dateTimeFormatterBuilder.toFormatter());


SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
    long timestamp = simpleDateFormat.parse(str).getTime();
    System.out.println(timestamp);
} catch (ParseException e) {
    e.printStackTrace();
}

salida:
1639065502667
1639058302000

(2021-12-09 15:58:22
2021-12-09 13:58:22)

¿Por qué hay una diferencia de 2 horas?
¿Cómo puedo analizarlo para que las salidas sean iguales?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    La diferencia de 2 horas se debe probablemente a la zona horaria. En el código, se crea un ZonedDateTime con un desplazamiento horario de UTC y luego más tarde se analiza la cadena de fecha/hora utilizando la zona horaria predeterminada del sistema, que podría ser diferente de UTC.

    Para hacer que las salidas sean iguales, puedes especificar la zona horaria de forma explícita al analizar la cadena de fecha/hora. Aquí tienes un ejemplo:

    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    simpleDateFormat.setTimeZone(TimeZone.getTimeZone("UTC")); // establecer la zona horaria explícitamente a UTC
    try {
        long timestamp = simpleDateFormat.parse(str).getTime();
        System.out.println(timestamp);
    } catch (ParseException e) {
        e.printStackTrace();
    }
    

    Esto debería darte la misma salida que ts, es decir, 1639065502667.

Comments are closed.