2012-07-05 19 views
13

Si creo un nuevo objeto Date(). Cuál será la zona horaria predeterminada que imprimirá.Cuál es la zona horaria predeterminada en java.util.Date

Tengo mi máquina funcionando en GMT. Y estoy creando un nuevo objeto Date(). Si imprimo ¿por qué muestra Thu Jul 05 08:21:05 PKT 2012. ¿Cómo se toma la zona horaria como PKT?

+1

pueden probar este enlace a http://stackoverflow.com/q/2891361/1465828 – Aprian

+0

Gracias. Pero no está respondiendo mi pregunta – user1182253

+0

De acuerdo con otros idiomas, sé que debe ser UTC porque al menos en Python y Objective-C las fechas se almacenan con esta zona horaria predeterminada. –

Respuesta

18

La fecha en sí no tiene ningún huso horario. Su método toString() utiliza el huso horario predeterminado actual para devolver una cadena que representa esta fecha:

Date date = new Date(); 

System.out.println(TimeZone.getDefault()); 
System.out.println(date); 

TimeZone.setDefault(TimeZone.getTimeZone("UTC")); 

System.out.println(TimeZone.getDefault()); 
System.out.println(date); 

ejecutar el código anterior en mi máquina lleva a la siguiente salida: Fecha veces

sun.util.calendar.ZoneInfo[id="Europe/Paris",offset=3600000,dstSavings=3600000,useDaylight=true,transitions=184,lastRule=java.util.SimpleTimeZone[id=Europe/Paris,offset=3600000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=2,startMonth=2,startDay=-1,startDayOfWeek=1,startTime=3600000,startTimeMode=2,endMode=2,endMonth=9,endDay=-1,endDayOfWeek=1,endTime=3600000,endTimeMode=2]] 
Fri Jul 06 09:24:45 CEST 2012 
sun.util.calendar.ZoneInfo[id="UTC",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null] 
Fri Jul 06 07:24:45 UTC 2012 
+0

En eclipse, java.lang.date muestra un objeto cdate.zoneInfo. Puede que no sea accesible desde mi punto de vista, una fecha tiene una zona horaria asociada. Esto juega un papel vital al convertir a una zona horaria diferente. Sin conocer la zona horaria de origen, no sería posible la conversión. ¿Puedes arrojar algo de luz sobre el tema "no tiene zona horaria?" –

+0

@ThomasS "no tiene ningún problema con la zona horaria" -> Por un lado, la documentación dice: ... la clase Fecha pretende reflejar el tiempo universal coordinado (UTC) ... –

3

Bueno, en realidad básicas por lo general son agnósticas de zona horaria, no almacenan zonas horarias. Para hacer uso de la zona horaria, utiliza formateadores, calendarios y similares. Por supuesto, la fecha básica debe estar en un huso horario predeterminado, cualquiera que sea (generalmente GMT); de lo contrario, no podría crear una fecha local a partir de la instancia de fecha básica.

En su caso particular, sería útil estudiar a) los javadocs yb) en la propia clase, ya que JDK suele distribuirse con el código fuente de java.util.Date. Según javadoc, la clase java.util.Date representa el número de milisegundos desde la hora base estándar conocida como "la época", es decir, el 1 de enero de 1970, 00:00:00 GMT.

Si muestra una fecha diferente cuando se imprime en su máquina, es porque su sistema la imprimirá utilizando la zona horaria predeterminada para su sistema. Sin embargo, puede imprimirlo usted mismo utilizando cualquier otra zona horaria.

3

Si está ejecutando bajo linux, hay algún archivo mágico de zona horaria en algún lugar del sistema. Por mi gentoo la magia se acaba de crear un archivo de texto/etc/zona horaria con el contenido

Europe/Berlin 

Lo curioso es que date dio la hora correcta y la zona horaria (CEST) todo el tiempo, pero java me envió a Greenwich.

> date 
Thu Sep 18 08:49:14 CEST 2014 
Cuestiones relacionadas