2010-11-30 15 views
11

Año 2038 Error en toda la web, pero esto parece ser un problema de Unix. ¿Cómo afectará esto a Java Date?¿Por qué un programador de Java debería preocuparse por el error del año 2038?

+7

¿Habrá otra película de Roland Emmerich sobre eso? –

+0

No es un error. Todo el mundo sabe que el mundo terminará en 2038. La única pregunta es cómo. Mi conjetura es la plaga zombie. – Steve314

+2

No debería molestar a nadie ... como todos sabemos, la tierra termina en 2012 de todos modos. Escribe algunas cosas interesantes en su lugar – chzbrgla

Respuesta

27

¿Qué te parece que hace? La clase Date de Java almacena un long de 64 bits (no de 32 bits, como con el Y2K38). También almacena milisegundos, lo que disminuye el rango, pero solo ligeramente (equivalente a ~ 10 bits).

En Java, tenemos el error 292278994 del año.

+1

+1 - pero seguramente Java en Unix a veces necesita hablar fechas con el O/S subyacente. Es poco probable que sea un problema real (hasta 2038), pero tal vez merezca una mención. – Steve314

+1

@Steve, es cierto, pero creo que la pregunta es específicamente sobre 'java.util.Date', no sobre nada relacionado con' time_t'. –

+0

¿Cómo obtiene una aplicación Java su tiempo en primer lugar? Java podría manejar bien las fechas, pero GIGO aún podría ser un problema. – BCS

4

No creo que afecte a la clase Java Date en lo que respecta al programador. Ya está usando valores de 64 bits. Puedo ver que es un problema si está usando un almacén de datos que todavía usa valores de 32 bits. No espero ver demasiados sistemas operativos de 32 bits en 27 años.

+1

Aún menos en 28 años. – Steve314

+0

que no se han corregido para solucionarlo. Imagino que algunos sistemas integrados aún pueden usar 32 bits. –

+1

Estoy seguro de que dentro de 28 años ni siquiera los sistemas incorporados usarán 32 bits –

0

Esto es probablemente un remanente de los viejos C días cuando los tipos de datos de fecha volcaron en 2038. Puede ser un problema con algunas realmente antiguas aplicaciones, pero no para Java. Bostezo.

1

Java y los tiempos no están restringidos solo a la clase Date.

¿De dónde vienen a menudo las fechas/horas? A menudo, desde System.currentTimeMillis, que es , un método nativo. Por lo general, no está implementado en Java. El tipo de devolución es largo, pero eso significa poco, ya que el método nativo puede devolver cualquier valor que simplemente encaje en un largo.

Todo dependerá del sistema operativo y su implementación del JRE.

Confiar en la presencia de sistemas de 64 bits podría ser ingenuo, ya que aparentemente hay muchos sistemas integrados que son de 32 bits, y seguirán existiendo.

En general, Java está expuesto al problema 2038.

0

Esto no es realmente una respuesta. Pero algunos mensajes lo han hecho bien. Java es compatible con 2038, pero no cumple 10000 (si pone un largo en el constructor de fecha que representa algo después de 9999, no funcionará y devolverá un número raro), pero sí, 2147483648 definitivamente no es el valor máximo permitido en la fecha de Java clase.

Cuestiones relacionadas