2015-05-02 10 views
6

Sto utilizzando l'ora CST nel mio sistema, dalla parte anteriore tramite javascript sto inviando la data odierna al controller di primavera. In primavera controller attraverso la richiesta param sto ottenendo la data e la conversione fino alla data attraverso l'annotazione @DateTimeFormat e ottengo la stessa data indietro alla vista che sto ottenendo la data esatta che cosa mi aspetto.Per quanto riguarda il problema della data in locale e server

Ma, quando eseguo il test attraverso l'ambiente di test distribuito nel server Amazon. Quando passo la data odierna e quando tento di ottenere la stessa data per il front end, la data è diversa. Ho scritto il codice che ho usato.

Javascript:

$http({ 
     method : 'GET', 
     url : urlpath + '/getDate/', 
     params: { 
      date: new Date().toString("MM/dd/yyyy") 

      } 
    }).success(function(response) { 
    console.log("date is"+response)         
} 

del codice Java:

@RequestMapping(value = "/getdate", method = RequestMethod.GET) 
public Date getdate(@RequestParam("date") @DateTimeFormat(pattern ="MM/dd/yyyy") throws Exception {      
    return date;  
} 

La data nella mia macchina locale è 2015/01/05 23:17 La dichiarazione console è Ven 1 Mag 2015 00:00 : 00 GMT-0500 (ora legale centrale) no hh mm e ss poiché ho ritagliato usando l'annotazione datetimeformat.

Nel mio ambiente di test che sto usando lo stesso codice, ma la console è Priting come di seguito gio apr 30, 2015 23:00:00 GMT-0500 (Central Daylight Time)

Qualcuno può inchiodare questo problema e dimmi il rootcause per questo problema.

+2

Potrebbe essere a causa della differenza di fuso orario. Per la tua macchina locale, otterrà il fuso orario del tuo sistema. Ma quando si distribuisce in ambiente di test, otterrà la data di quel server. Il fuso orario di quel server potrebbe essere indietro di un'ora. –

+0

Puoi correggere il tuo codice postato, '@DateTimeFormat (pattern = Date date)' e 'new Date(). ToString (MM/gg/aaaa)' sono - AFAIK - sintassi non valida –

+0

Ti suggerisco di lavorare con 'Unix timestamps' e poi convertirli in date formattate. – infomaniac

risposta

1

Il tempo è solo HH: MM: SS e il gioco è fatto. Il fuso orario viene fornito come predefinito dal tuo computer, a meno che non lo imposti implicitamente in modo diverso. Quindi, come puoi vedere, quando invii solo il tempo, in realtà non significa nulla di ciò che è il tempo reale.

Ci sono 2 soluzioni.

1) Più semplice. Qualsiasi cosa tu invii, la trasmette allo stesso fuso orario. Ad esempio UTC. Quindi, ogni volta che lo ottieni, usalo come modulo orario UTC. Implicitamente. Quindi, ogni parte del tuo sistema sa che il tempo inviato è UTC e agisce di conseguenza. Non lasciare mai l'impostazione predefinita. Chissà dove (quale fuso orario) funziona uno dei tuoi computer.

2) Simile ma con più parametri. Invia 2 parametri - ora e fuso orario. Funziona allo stesso modo - devi sempre lanciare il tempo (di nuovo, non usare mai il valore predefinito) - ma, almeno, sai quale tempo reale si trova sul lato mittente e, in questo caso, vedrai quale è il fuso orario del computer di prova.

Problemi correlati