Te sugerimos que pruebes esta solución en un entorno controlado antes de enviarlo a producción, saludos.
Solución:
Las fechas desde las que imprime Calendar
son locales para su zona horaria, mientras que la época se define como la medianoche del 1970-01-01 en UTC. Entonces, si vive en una zona horaria al oeste de UTC, su fecha aparecerá como 1969-12-31, aunque (en UTC) todavía es 1970-01-01.
Primero, c.get(Calendar.MONTH)
devuelve 0 para enero, 1 para febrero, etc.
Segundo, usa DateFormat
a las fechas de salida.
En tercer lugar, sus problemas son un gran ejemplo de lo incómoda que es la API de fecha de Java. Use la API de Joda Time si puede. Te hará la vida un poco más fácil.
Aquí hay un mejor ejemplo de su código, que indica la zona horaria:
public static void main(String[] args)
final DateFormat dateFormat = SimpleDateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL);
long l = 10000000L;
System.out.println("Long value: " + l);
Calendar c = new GregorianCalendar();
c.setTimeInMillis(l);
System.out.println("Date: " + dateFormat.format(c.getTime()));
l = 1000000000000L;
System.out.println("nLong value: " + l);
c.setTimeInMillis(l);
System.out.println("Date: " + dateFormat.format(c.getTime()));
Calendar#setTimeInMillis() establece la hora del calendario en milisegundos después del 1 de enero de 1970 GMT.
Calendar#get() devuelve el campo solicitado ajustado para la zona horaria del calendario que, por defecto, es la zona horaria local de su máquina.
Esto debería funcionar como espera si especifica la zona horaria “GMT” cuando construye el calendario:
Calendar c = new GregorianCalendar(TimeZone.getTimeZone("GMT"));
Puntuaciones y reseñas
Si te gustó nuestro trabajo, tienes la habilidad dejar una crónica acerca de qué te ha parecido esta crónica.