2012-03-29 6 views
3

Ich habe eine Web-Anwendung, und wenn die Client-Seite (in Großbritannien, die in Zeitzone UTC + 0000) ich das Datum Parameter als String senden wie so:Java: Datum und Offset-Problem?

date = "2012-03-28 10:00:00 +0000" // this is meant to say "This is the date and time BST which is +0000 offset from UTC" 

aber wenn ich erhalte diese Zeichenfolge in Mein Java-REST-Service und versuchen, es in ein Date-Objekt mit SimpleDateFormater zu parsen, es geht davon aus, dass das heißt: "Dies ist 10:00 Uhr UTC und ich bin in einer UTC + 0000 Zeitzone", so dass es als 10 : 00 AM UTC-Zeit anstelle von 09:00 AM UTC-Zeit, die die richtige Konversation von 10:00 AM BST ist (was +0000 ist).

hier ist mein Beispiel Java-Code:

String dateString = "2012-03-28 10:00:00 +0000"; 
Timestamp timestamp= null; 
try{ 
DateFormat planningDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss Z"); 
Date date = planningDateFormat.parse(dateString); 
timestamp = new Timestamp(date.getTime()); 
System.out.println("Time stamp value is: " + timestamp.getTime()); 
System.out.println("Date value after parse: " + date); 
System.out.println("Time value passed in was: " + dateString); 
} 
catch(Exception e){} 

die Ausgänge:

$ java TimeTest 
Time stamp value is: 1332917100000 
Date value after parse: Wed Mar 28 11:00:00 BST 2012 
Time value passed in was: 2012-03-28 10:00:00 +0000 

Wie kann ich um dieses Problem zu bekommen?

Antwort

1

TimeZone-Management ist einer der schwierigsten Teil beim Erstellen einer Webanwendung :). Aber es gibt einige gute Projekte im Internet, die solche Fälle gut unterstützen. Einer von ihnen würde

http://joda-time.sourceforge.net/

6

bedeutet dies Joda Zeit sein wird zu sagen: "Das ist das Datum und die Uhrzeit BST, die 0.000 von der UTC-Offset"

Das ist Dein Problem dann. BST ist eine Stunde vor UTC. So 11 Uhr BST ist 10 Uhr UTC, daher Ihre Ausgabe. Sie sollten wahrscheinlich ein wenig mehr auf UTC lesen.

Das Vereinigte Königreich ist nicht in "Zeitzone UTC + 0000" ist es in "Zeitzone Europa/London", die UTC + 0 im Winter und UTC + 1 im Sommer ist.

(Wie Bogdan sagt, sind Zeitzonen hart und Joda Time ist eine viel bessere Datum/Zeit-Bibliothek als die integrierten Java eine sowieso ... aber es würde Ihnen die gleiche Antwort geben ...)

EDIT: Nur um es völlig klar zu machen, gibt dieser Wert "2012-03-28 10:00:00 +0000" 10 Uhr UTC in jedem gesunden System an. Das ist 11 Uhr BST, genau wie Java es zeigt. Wenn du versuchst, es zu etwas anderem zu machen, solltest du damit aufhören, da du mit jedem System, das dem Menschen bekannt ist, im Widerspruch stehen wirst.

+0

Ja ich weiß, wie UTC funktioniert, was ich versuche zu sagen ist, ich habe die Zeit in BST nicht in UTC. Ich sende es nicht als UTC, ich sende es 10 AM BST und möchte, dass JAVA meine 10:00 AM BST in 9:00 AM UTC umwandelt. –

+0

@Mo .: Sie scheinen * nicht * zu wissen, wie UTC funktioniert, vorausgesetzt, Sie haben * mehrmals * in Ihrem Beitrag behauptet, dass das Vereinigte Königreich auf "UTC + 0000" steht, wenn wir * nicht * sind. BST ist * nicht * +0000. Das Vereinigte Königreich ist * keine * UTC + 0000 Zeitzone. Zeitzonen-Offsets geben einen Offset von UTC, nicht von "Standardzeit in Ihrer Zeitzone". –

+0

Was ich mit BST meinte ist, dass meine Zeit im Moment die UK Zeit im Moment darstellt (10:00 Uhr Ortszeit, nicht 10:00 UTC) –