2012-03-26 23 views
11

Tengo el siguiente código, mi objetivo va a devolver GMT+0 vez en milisegundos. Pero ¿Por qué siempre obtengo mi timezone millisec local?Java: zona horaria por la que la zona horaria diferente da el mismo valor en milisec

Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT")); 
Calendar cal2 = Calendar.getInstance(); 
System.out.println("Time zone id is:"+cal.getTimeZone().getID()+";time in millisec:"+cal.getTimeInMillis()); 
System.out.println("Time zone id is:"+cal2.getTimeZone().getID()+";time in millisec:"+cal2.getTimeInMillis()); 

La salida es
Zona horaria id es: GMT, el tiempo en milisegundos: 1332740915154
Zona hora id es: Europa/Helsinki, el tiempo en milisegundos: 1332740915154

Por qué diferente elasticidad Zona horaria ¿MISMO valor en milisegundos?
Supongo que si es GMT+0, entonces debería ser un valor diferente en milisegundos frente a la zona horaria local.

+0

¿Cuál es la zona horaria en su sistema? – sgowd

+0

¿Qué pasa con System.currentTimeMillis() ;? – user84592

+0

Mi zona horaria es GMT + 2 con horario de verano – user84592

Respuesta

21

¿Por qué las diferentes zonas horarias dan MISMO valor en milisegundos?

Porque eso es lo que significa que hacer. De la documentación:

(Devuelve) la hora actual como milisegundos UTC de la época.

En otras palabras, es el valor que sería en el Date devuelto por getTime - que no depende de la zona horaria. Si desea que los valores que dependen de la zona horaria, etc. utilizar Calendar.Get(Calendar.YEAR)

Ambos valores Calendar.getTime() y Calendar.getTimeInMillis() de retorno que representan la instante en el tiempo en el calendario, que es independiente tanto de zona horaria y el sistema de calendario.

+0

¿Mi duda es que la zona horaria da milisegundos o solo da la zona horaria solicitada? – sgowd

+0

@ sans481: No sé lo que estás preguntando, me temo, ¿podrías volver a formular la pregunta? –

+0

No obtengo exactamente lo que devuelve "la hora actual como milisegundos UTC de la época". – sgowd

6

El millisec de un objeto Date en Java es sólo los milisegundos desde GMT+0 1970/01/01 00:00:00. Es independiente de la zona horaria. La zona horaria es una propiedad para formatear la fecha en una cadena legible.

+0

Para eso no son realmente las zonas horarias; eso es más parecido a lo que son los calendarios. Las zonas horarias son para convertir entre UTC y la hora local. –

1

método getTimeInMillis() devuelve la hora actual como milisegundos UTC de la época. Entonces, está obteniendo los mismos milisegundos, incluso cuando ambos objetos de calendario tienen una zona horaria diferente.