Java.util.Date utilizza TimeZone?

Ho 2 computer diversi, ognuno con TimeZone diverso.

In un computer im stampa System.currentTimeMillis() , quindi stampa il comando seguente in entrambi i computer: System.out.println(new Date(123456)); -> 123456 sta per il numero arrivato nell’attuale currentTimeMillis nel computer # 1.

La seconda stampa (sebbene digitata con hardcoded) produce stampe diverse, su entrambi i computer. perché?

Che ne dici di alcuni dettagli pedanti.

java.util.Date è indipendente dal fuso orario. Dice così bene nel javadoc.

Vuoi qualcosa rispetto ad un particolare fuso orario? Quello è java.util.Calendar .

La parte difficile? Quando stampi questa roba (con java.text.DateFormat o una sottoclass ), ciò implica un Calendario (che coinvolge un fuso orario). Vedi DateFormat.setTimeZone () .

Sembra sicuro (non ha controllato l’implementazione) come java.util.Date.toString () passa attraverso un DateFormat. Quindi anche la nostra class (per lo più) indipendente dal fuso orario si incasina w / timezones.

Vuoi ottenere quella roba del fuso orario dai nostri oggetti Date senza zoneless? C’è Date.toGMTString () . Oppure puoi creare il tuo SimpleDateFormatter e usare setTimeZone () per controllare quale zona è usata tu stesso.

Perché quel numero di millisecondi è il numero di millisecondi oltre l’1/1/1970 UTC. Se poi si traduce in un fuso orario diverso, il tempo di rendering sarà diverso.

ad esempio 123456 potrebbe corrispondere a mezzogiorno a Greenwich (UTC). Ma quello sarà un tempo diverso a New York.

Per confermare ciò, utilizzare SimpleDateFormat con un fuso orario in uscita e / o modificare il fuso orario nel secondo computer in modo che corrisponda al primo.

perché?

Perché qualcosa come “4 ottobre 2009, 14:20” è privo di significato senza conoscere il fuso orario a cui si riferisce – che puoi vedere molto probabilmente in questo momento, perché è il mio momento mentre scrivo questo, e probabilmente differisce di molte ore dal tuo tempo anche se è lo stesso momento nel tempo.

I timestamp del computer sono generalmente misurati in UTC (fondamentalmente il fuso orario di Greenwich, Inghilterra), e il fuso orario deve essere preso in considerazione quando li si formatta in qualcosa di leggibile.

javadoc lo spiega bene, System.currentTimeMillis () Si noti che mentre l’unità di tempo del valore di ritorno è un millisecondo, la granularità del valore dipende dal sistema operativo sottostante e potrebbe essere maggiore. Ad esempio, molti sistemi operativi misurano il tempo in unità di decine di millisecondi.

Vedere https://docs.oracle.com/javase/7/docs/api/java/util/Date.html#toString () .

Sì, utilizza i fusi orari. Dovrebbe anche stamparli (i tre personaggi prima dell’anno).