2015-05-02 6 views
6

Ich benutze CST Zeit in meinem System, von Front-End über Javascript Ich sende heute Datum an Feder-Controller. Im Frühjahr Controller durch Anfrage param Ich bekomme das Datum und die Konvertierung bis zum Datum durch @DateTimeFormat Annotation und ich bekomme das gleiche Datum zurück auf die Ansicht Ich bekomme das genaue Datum, was ich erwarte.In Bezug auf Datum Problem in lokalen und Server

Aber wenn ich durch meine Testumgebung teste, die in Amazon Server eingesetzt wird. Wenn ich das heutige Datum verpasse und versuche, das gleiche Datum für das Frontend zu bekommen, kommt es als anderes Datum. Ich habe den Code geschrieben, den ich benutzt habe.

Javascript:

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

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

Java-Code:

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

Das Datum in meinem lokalen Rechner ist 2015.01.05 23.17 Die Konsole Aussage Fr 1. Mai 2015 00:00 : 00 GMT-0500 (Central Daylight Time) nein hh mm und ss seit ich mit der datetimeformat annotation abgeschnitten habe.

In meiner Testumgebung ich den gleichen Code verwende aber die Konsole priting wie die unter Do 30. April 2015 23.00.00 GMT-0500 (Zentral Daylight Time)

jemand Nagel heraus Kann dieses Problem und sagen Sie mir die Ursache für dieses Problem.

+2

Es kann wegen der Zeitzone Unterschied sein. Für Ihren lokalen Computer erhält es die Zeitzone Ihres Systems. Wenn Sie jedoch in einer Testumgebung bereitstellen, wird das Datum dieses Servers abgerufen. Die Zeitzone dieses Servers kann eine Stunde zurück sein. –

+0

Kannst du deinen geposteten Code korrigieren, '@DateTimeFormat (pattern = Date date)' und 'new Date(). ToString (MM/dd/yyyy)' sind - AFAIK - nicht gültige Syntax –

+0

Ich würde vorschlagen, dass du arbeitest mit 'unix timestamps' und wandle diese in formatierte Daten um. – infomaniac

Antwort

1

Zeit ist nur HH: MM: SS und das ist es. Die Zeitzone wird standardmäßig von Ihrem Computer bereitgestellt, es sei denn, Sie haben dies implizit anders festgelegt. Wie du sehen kannst, bedeutet das, wenn du nur Zeit sendest, eigentlich nichts darüber, was Echtzeit ist.

Es gibt 2 Lösungen.

1) Einfachste. Was auch immer Sie senden, werfen Sie es in die gleiche Zeitzone. Zum Beispiel UTC. Dann, wann immer Sie es bekommen - benutzen Sie es als Zeitform UTC. Implizit. So weiß jeder Teil Ihres Systems, dass die gesendete Zeit UTC ist und entsprechend handelt. Überlassen Sie es niemals dem Standard. Wer weiß wo (zu welcher Zeitzone) einer Ihrer Computer arbeitet.

2) Ähnlich, aber mit mehr Parametern. Sende 2 Parameter - Zeit und Zeitzone. Funktioniert gleich - Sie müssen immer Zeit (wieder, verwenden Sie nie Standard) - aber zumindest wissen Sie, was Echtzeit auf der Senderseite und in diesem Fall werden Sie sehen, was Ihre Testcomputer Zeitzone ist.