2012-05-07 20 views
9

La documentazione per Date.getTimezoneOffset dice:Perché Date.getTimezoneOffset è stato deprecato?

obsolete. A partire da JDK versione 1.1, sostituito da - (Calendar.get (Calendar.ZONE_OFFSET) + Calendar.get (Calendar.DST_OFFSET))/(60 * 1000).

Perché è stato deprecato? C'è un modo più breve (Apache Commons?) Per ottenere l'offset da UTC in ore/minuti? Ho un oggetto Date ... dovrei convertirlo in JodaDate per questo?

E prima che tu chieda perché voglio lo scostamento UTC - è solo per registrarlo, niente di più.

+2

Si dovrebbe passare a JodaTime per qualsiasi cosa relativa alla gestione di data e ora in Java IMHO. – pcalcao

+4

Perché non tutti gli offset del fuso orario sono interi. In altre parole, non tutti i fusi orari sono un'ora prima o dopo rispetto al fuso orario adiacente. Controlla http://www.timeanddate.com/worldclock/ –

+2

@GilbertLeBlanc - restituisce minuti, non ore. – ripper234

risposta

10

Ci sono 2 domande qui.

  1. Perché Date.getTimezoneOffset è stato ritirato?

Penso che sia perché hanno effettivamente deprecato quasi tutti i metodi di Data e spostato la loro logica in calendario. Ci si aspetta che utilizziamo il set generico e lo get con il parametro che indica quale campo specifico ci serve. Questo approccio ha alcuni vantaggi: meno numero di metodi e la possibilità di eseguire setter in un ciclo che passa ogni volta ad un campo diverso. Personalmente ho usato molto questa tecnica: rende il codice più breve e più facile da mantenere.

  1. Collegamento? Ma cosa c'è di sbagliato con la chiamata

Calendar.get(Calendar.DST_OFFSET) confronto ad Calendar.getTimeZoneOffset()

Per quanto posso vedere la differenza è di 6 caratteri.

Joda è una libreria molto potente e se si deve scrivere molto codice di manipolazione di data sofisticato. Personalmente uso lo standard java.util.Calendar e non vedo alcun motivo per utilizzare le librerie esterne: il buon vecchio calendario è abbastanza buono per me.

+1

+1 per raccomandare Joda. –

+0

Accetto questo per 'hanno effettivamente deprecato tutti i metodi di Data'. Tutti raccomandano che io passi a joda-chill per favore, è un oggetto data in un'API che sto usando, non posso davvero cambiare l'API ora, posso. – ripper234

3

Tutta la logica di manipolazione della data è stata spostata da Date una volta che gli implementatori Java hanno capito che potrebbe essere necessario implementarla in modo diverso per diversi tipi di calendari (da qui la necessità di utilizzare uno GregorianCalendar per recuperare queste informazioni ora). A Date ora è solo un wrapper attorno a un valore di tempo UTC.

2

Fare attenzione prima di incollare il codice da questa pagina. forse solo me, ma credo che al fine di ottenere l'offset in minuti che devi fare

int tzOffsetMin = (cal.get(Calendar.ZONE_OFFSET) + cal.get(Calendar.DST_OFFSET))/(1000*60); 

piuttosto che quello che dice il Javadoc tz, che è:

int tzOffsetMin = -(cal.get(Calendar.ZONE_OFFSET) + cal.get(Calendar.DST_OFFSET))/(1000*60); 



Calendar.ZONE_OFFSET fornisce lo scostamento standard (in msecs) da UTC. Questo non cambia con l'ora legale. Ad esempio per il fuso orario della costa est degli Stati Uniti questo campo sarà sempre di -6 ore indipendentemente dall'ora legale.

Calendar.DST_OFFSET fornisce lo scostamento DST corrente (in msec) - se presente.Ad esempio, durante l'estate in un paese che utilizza l'ora legale, è probabile che questo campo abbia il valore +1 ora (1000 * 60 * 60 msec).

Problemi correlati