2012-06-25 15 views
5

Sto avendo un po 'di problemi con una conversione di tempo tra un telefono Android (Nexus One) e un server Java. Tutto quello che ho letto dice che sono uguali, ma quando sto convertendo un lungo time stamp da mi sembra di perdere 1 ora (esattamente).Tempo Android vs Tempo Java

In particolare, se corro il seguente codice sul dispositivo Android ottengo il seguente output

Codice:

Calendar g = Calendar.getInstance(); 
g.setTimeInMillis(1340661899000L); 
Log.d(TAG, g.getTime().toLocaleString()); 

uscita: 25 giugno 2012 18:04:59

Quale penso sia corretto, ma quando eseguo lo stesso identico codice su un server java ottengo lo stesso giorno ma 1 ora prima

Codice:

Calendar g = Calendar.getInstance(); 
g.setTimeInMillis(1340661899000L); 
System.out.println(g.getTime().toLocaleString()); 

uscita: 25-Giu-2012 17:04:59

Qualcuno sa che cosa potrebbe causare questo? Sia il server che il telefono si trovano nello stesso posto (non che dovrebbe essere importante) e gli orologi sia sul server che sul telefono corrispondono a

+1

Probabilmente non si vuole usare il tempo localizzata nella comunicazione tra client e server, dal momento che non si può essere sicuro di quello che il locale ora sul client sarà. –

+0

il valore 1340661899000L non dovrebbe essere un ora locale, voglio solo per visualizzare ciò che un dato momento sarebbe nel dispositivo fuso orario –

+2

Expecting sia client che server per essere nella stessa modalità fuso orario/è quello che stavo suggerendo di evitare. –

risposta

4

Considerando che è una differenza di un'ora, è possibile avere l'ora legale (Daylight Risparmio) impostato sul server e non sul telefono o viceversa?

+0

bene ora mi sento solo un deficiente. Ya per qualche motivo la versione del telefono di toLocaleString non ha preso in considerazione l'ora legale anche se l'orologio del telefono era l'ora esatta. –

+0

@JohnS Questo è un esempio del perché si dovrebbe evitare di lavorare in valori di data-ora locali. Mantenere la comunicazione dei dati, la logica di business, la memorizzazione dei dati e l'orologio del server tutto in [UTC] (http://en.m.wikipedia.org/wiki/Coordinated_Universal_Time) (con poche eccezioni). Converti in fuso orario locale regolato solo quando previsto dall'utente o consumatore dei tuoi dati. –

1

quello che Chris sta cercando di dire è che il telefono cellulare e il server possono essere configurati per diversi fusi orari.

provare a stampare il risultato di cal.getTimeZone(). Se questo dovesse essere il problema, dovresti scegliere un fuso orario da utilizzare per le comunicazioni. Per esempio:

Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT+0")); 

Secondo i JavaDocs le istanze del calendario Usare il fusi orari predefiniti riportati da:

TimeZone.getDefault() 

Nonostante il server e mobile di essere impostati sullo stesso fuso orario non necessariamente significa che utilizzano lo stesso TimeZone predefinito.

Problemi correlati