Wie bekomme ich die britische Sommerzeit-offset (BST) in Java
In Großbritannien, würde ich mag, um den aktuellen offset von UTC/GMT. Derzeit wird der offset von 1 Stunde, aber es scheint keinen Weg zu finden, dieses.
Code
TimeZone timeZone = TimeZone.getDefault();
logger.debug("Timezone ID is '" + timeZone.getID() + "'");
if (timeZone.getID().equals("GMT")) {
timeZone = TimeZone.getTimeZone("Europe/London");
logger.debug("New timezone is '" + timeZone.getID() + "'");
}
Long eventDateMillis = Long.parseLong(eventDateValue.getKeyValue());
int timezoneOffset = timeZone.getOffset(eventDateMillis);
logger.debug("Offset for " + eventDateValue + "(" + eventDateMillis + ") using timezone " + timeZone.getDisplayName() + " is " + timezoneOffset);
gibt die debug-Ausgabe
Wed 2012/09/19 16:38:19.503|Debug|DataManagement|Timezone ID is 'GMT'
Wed 2012/09/19 16:38:19.503|Debug|DataManagement|New timezone is 'GMT'
Wed 2012/09/19 16:38:19.557|Debug|DataManagement|Offset for 18 Sep 2012 09:00(1347958800000) using timezone Greenwich Mean Time is 0
In anderen Worten, timezone 'GMT' ist wieder ein Versatz von null, und ich kann nicht herausfinden, wie legen Sie es auf etwas zurück das richtige offset.
Wenn jemand für ein funktionierendes code-Beispiel für JodaTime, dass tun würde, aber ich möchte wirklich vermeiden, installieren Sie eine eigene Bibliothek nur für das, was sollte ein one-liner.
Die Java-version ist 7.
- Sie sagen "richtigen offset". Was wäre die richtige offset für die GMT?
- GMT/UTC sollte 0 sein, was ich will, ist BST, das sollte 1 Stunde im Wert von ms derzeit: timeanddate.com/worldclock/city.html?n=136
- Hier ist die Ausgabe, die ich bekommen folgenden code:
TimeZone timeZone = TimeZone.getTimeZone("Europe/London"); int timezoneOffset = timeZone.getOffset(System.currentTimeMillis()); System.out.println("Offset for timezone " + timeZone.getID() + " is " + timezoneOffset);
=>Offset for timezone Europe/London is 3600000
das ist ziemlich viel, was Sie erwarten keine ?
Du musst angemeldet sein, um einen Kommentar abzugeben.
0 ist das richtige offset für die MEZ, dauerhaft.
Du willst "Europa/London", das ist die Zeitzone, die wechselt zwischen GMT und BST.
EDIT: ich hatte ursprünglich nicht bemerkt, dass Sie versuchen zu erhalten, Europe/London. Es sieht aus wie Sie die Zeitzone-Datenbank Ihrer JVM ist im Grunde versaut. Sie könnte entweder versuchen, die Befestigung , dass, oder verwenden Sie einfach Joda Zeit, die kommt mit Ihrer eigenen Kopie von tzdb. Beispiel-code:
Ich habe gerade festgestellt das selbst.
Habe ich versucht Zeitzone.getTimeZone("London"); und es funktionierte.
Nein, ich habe keine Ahnung, warum - "London" ist nicht einer der IDs Zeitzone zurück...
Verwenden Sie Zeitzone.getOffset( 0 ), anstelle von timezone.getOffset( eventDateMillis ).
Diese geben Sie den offset ab dem 1. Januar 1970 GMT-Zeit, die im Fall von Europa/London 3600000, NICHT null wegen der historischen Probleme mit Wales und Nordirland.
Mir den trick: