Convertir segundos desde el 01/01/1900 al sello de tiempo en Brasil

Robert Kock:

Estoy dispositivos que informan de su reloj del sistema como segundos desde la medianoche 01.01.1900 gestión.
Necesito convertir esto en una marca de tiempo.

Hasta el momento, estoy haciendo esto de la siguiente manera:

import java.text.SimpleDateFormat;
import java.util.Calendar;

public class TestTime
{
  // Pass seconds since 01-01-1900 00:00:00 on the command line
  public static void main(String[] args)
  {
    // ---------------------
    // Create time formatter
    // ---------------------
    SimpleDateFormat format;
    format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    // ---------------------------
    // Compose 01-01-1900 00:00:00
    // ---------------------------
    Calendar cal;
    cal = Calendar.getInstance();
    cal.set(Calendar.YEAR, 1900);
    cal.set(Calendar.MONTH, Calendar.JANUARY);
    cal.set(Calendar.DAY_OF_MONTH, 1);
    cal.set(Calendar.HOUR_OF_DAY, 0);
    cal.set(Calendar.MINUTE, 0);
    cal.set(Calendar.SECOND, 0);
    cal.set(Calendar.MILLISECOND, 0);

    // -------------------
    // Show what we've got
    // -------------------
    System.out.println(format.format(cal.getTime()));

    // ---------------------------------------------
    // Add the seconds as passed on the command line
    // ---------------------------------------------
    long secs = Long.parseLong(args[0]);
    while (secs > Integer.MAX_VALUE)
    {
      cal.add(Calendar.SECOND, Integer.MAX_VALUE);
      secs -= Integer.MAX_VALUE;
    }
    cal.add(Calendar.SECOND, (int)secs);

    // -------------------
    // Show what we've got
    // -------------------
    System.out.println(args[0] + " corresponds to " + format.format(cal.getTime()));

  } // main

} // class TestTime

Cuando se ejecuta esto en mi PC local (Italia, Windows 7), me sale el siguiente:

java -cp . TestTime 3752388800
1900-01-01 00:00:00
3752388800 corresponds to 2018-11-28 10:13:20

Esto es perfectamente correcta.
Consigo los mismos resultados cuando se ejecuta este en una máquina Linux (todavía en Italia).

Sin embargo, ejecutar el mismo programa en una máquina Linux en Brasil, consigo resultados diferentes:

java -cp . TestTime 3752388800
1900-01-01 00:00:00
3752388800 corresponds to 2018-11-28 11:19:48

Cualquiera que sea el valor que pase en la línea de comandos, la diferencia es siempre 01:06:28.
Cualquier idea de donde esta diferencia está viniendo?

Por cierto, no estoy preocupado por la zona horaria. Sólo necesito una marca de tiempo

Actualización 1:
Exactamente lo mismo sucede también cuando se utiliza Java 6 (que es la versión real que se utiliza dentro de nuestro entorno de producción en Brasil).
Por lo tanto, el problema no depende de la versión de Java

Actualización 2:
El problema no se produce al introducir un número de segundos por debajo de 441 763 200 (que corresponde al 01/01/1914 00:00:00) Los restos de interrogación por eso que tenemos una diferencia para Brasil?

elegibilidad:

Echar un vistazo a este sitio: https://www.timeanddate.com/time/zone/brazil/sao-paulo y navegar a los cambios de zona horaria para: 1900-1924. Allí se puede ver una desviación de -03: 06: 28 a UTC antes de 01/01/1914. Es exactamente la misma razón que en qué está restando estas dos veces (en 1927), dando un resultado extraño?

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=184144&siteId=1
Recomendado
Clasificación