2011-03-30 28 views
16

¿Cuál es el rango de valores válidos que puedo almacenar en java.util.Date? El API no dice mucho sobre esto.¿Rango válido para java.util.Date?

¿O solo admite fechas que se pueden expresar como marcas de tiempo de Unix (es decir, fechas posteriores al 1.1.1970)? Si es así, ¿hay quizás una clase (serializable) en el JDK que también admite fechas anteriores?

Lo que estoy buscando es una clase/tipo para un campo de cumpleaños en db4o

Respuesta

22

Es compatible con fechas entre Long.MIN_VALUE y Long.MAX_VALUE:

class DateTest { 
    public static void main(String[] args) { 
     DateFormat df = new SimpleDateFormat("d MMM yyyy G, HH:mm:ss.S Z"); 

     System.out.println(df.format(new Date(Long.MIN_VALUE))); 
     System.out.println(df.format(new Date(0))); 
     System.out.println(df.format(new Date(Long.MAX_VALUE))); 
    } 
} 

salidas

2 Dec 292269055 BC, 10:47:04.192 -0600 
31 Dec 1969 AD, 18:00:00.0 -0600 
17 Aug 292278994 AD, 01:12:55.807 -0600 

(Nota: Los tiempos están por encima de hora del centro)

+1

No está rompiendo en absoluto, simplemente no está imprimiendo el campo de la era ... –

+0

@Michael Borgwardt - Aunque 'Date' en sí no tiene un campo de época (al menos no accesible) - si tuviera que envolverlo en un 'Calendario', podría imprimirse. –

+0

Adivina qué hace Date.toString() (después de adivinar qué System.println (Object) hace). –

1

fechas pueden contener valores antes de 1.1.1970, sólo tiene que utilizar :-) larga negativa

12

java.util.Date almacena en fechas a long como milisegundos usando 1970-01-01 como referencia. Como long es un número entero de 64 bits con signo, puede esperar que java.util.Date cubra aproximadamente 290 millones de años antes y después de la fecha de referencia, es decir, si no le importa la representación precisa y los cambios del sistema de calendario.

A menos que usted está planeando una fiesta de cumpleaños para un dinosaurio, yo diría que java.util.Date es probablemente muy bien para su propósito ...

+0

Eso es útil, gracias. No sabía que los valores negativos eran válidos para las marcas de tiempo. – Dexter

Cuestiones relacionadas