2012-07-05 12 views
13

Se creo un nuovo oggetto Date(). Quale sarà il fuso orario predefinito che stamperà.Qual è il fuso orario predefinito in java.util.Date

Ho la mia macchina in esecuzione in GMT. E sto creando un nuovo oggetto Date(). Se stampo perché mostra Thu Jul 05 08:21:05 PKT 2012. Come ci vuole il fuso orario come PKT?

+1

può provare questo collegamento a http://stackoverflow.com/q/2891361/1465828 – Aprian

+0

Grazie. Ma non risponde alla mia domanda – user1182253

+0

Secondo altri linguaggi so che dovrebbe essere UTC perché almeno in Python e in Objective-C le date sono memorizzate con questo fuso orario predefinito. –

risposta

18

La data di per sé non ha alcun fuso orario. Il suo metodo di toString() utilizza il fuso orario predefinito corrente per restituire una stringa che rappresenta questa data:

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); 

L'esecuzione del codice di cui sopra sulla mia macchina porta alla seguente uscita: volte data

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

In eclipse un java.lang.date mostra un oggetto cdate.zoneInfo. Potrebbe non essere accessibile dal mio pov una data ha un fuso orario associato. Questo ha un ruolo fondamentale quando si converte in un fuso orario diverso. Senza conoscere il fuso orario sorgente, nessuna conversione sarebbe possibile. Puoi far luce sul fatto che "non ha importanza nel fuso orario?" –

+0

@ThomasS "non ha problemi di fuso orario" -> Per prima cosa, la documentazione dice: ... la classe Date è pensata per riflettere l'ora universale coordinata (UTC) ... –

3

Beh in realtà di base di solito sono agnostici dei fusi orari, non memorizzano fusi orari. Per usare il fuso orario usi formattatori, calendari e simili. Ovviamente la data di base deve essere in un fuso orario predefinito, qualunque esso sia (di solito GMT), altrimenti non sarebbe possibile creare una data locale dall'istanza di data di base.

Nel caso specifico, sarebbe utile esaminare a) javadocs e b) nella classe stessa, poiché JDK viene solitamente distribuito con il codice sorgente di java.util.Date. Secondo javadoc la classe java.util.Date rappresenta il numero di millisecondi dal tempo base standard noto come "l'epoca", ovvero il 1 gennaio 1970, 00:00:00 GMT.

Se mostra una data diversa quando viene stampato sulla macchina, è perché il sistema lo stamperà utilizzando il fuso orario predefinito per il sistema. Puoi comunque stamparlo da solo utilizzando qualsiasi altro fuso orario.

3

Se si esegue sotto Linux, c'è qualche file di fuso orario magico da qualche parte nel sistema. Per il mio gentoo la magia è stata solo la creazione di un file di testo/etc/fuso orario con il contenuto

Europe/Berlin 

La cosa divertente è che date ha dato l'ora esatta ed il fuso orario (CEST) per tutto il tempo, ma java mi ha mandato a Greenwich.

> date 
Thu Sep 18 08:49:14 CEST 2014 
Problemi correlati