"=SimpleDateFormat ohne den Zeitzonenoffset in Java (GMT+00:00) für die eigene Zeitzone
Ist es möglich, die Formatierung eines Datum und Zeit in Java mit Hilfe der " = SimpleDateFormat-Klasse zu geben, die Zeitzone Teil eines Datums, ohne die +0000, nachdem es.
Bearbeiten
Wir ändern die Standard-Zeitzone in Java wie folgt:
SimpleTimeZone tz = new SimpleTimeZone(0, "Out Timezone");
TimeZone.setDefault(tz);
Leider bin ich nicht in der position, entfernen Sie diesen code. Ich würde raten auf das gesamte system anhalten zu arbeiten. Ich denke, der ursprüngliche Autor dies in die Arbeit um einige day light saving Fragen.
Mit diesem im Verstand, ich will, um das Datum zu formatieren als:
2011-12-27 09:00 GMT
oder
2011-12-27 09:00 MESZ
Nur kann ich das " = SimpleDateFormat, um die Ausgabe als:
2011-12-27 09:00:00 GMT+00:00
verwendet die format-string - yyyy-MM-dd HH:mm:ss z
Ich kann nicht finden Sie überall dort, wo der einfache timezone jede Bezugnahme auf die Winterzeit (MEZ) - id-oder Sommerzeit-id (BST).
Irgendwelche Gedanken?
Dank
Andez
System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z").format(new Date()));
für mich nur zurück2011-11-22 13:42:16 GMT
. Nicht, dass line-Anzeige der offset, auch für Sie?- ja, das funktioniert. Es könnte ein Problem mit dem JIDE components bin ich mit der " = SimpleDateFormat für die dann von den blicken von ihm. Zu untersuchen wird ein bisschen mehr. Setzen Sie diese auf so eine Antwort und ich werde es akzeptieren. Dank Andez.
- Es druckt GMT+offset auch für mich, auf beiden JDK-1.7.0 und 1.6.0_23 in Eclipse Indigo SR1 unter Windows 7 x64. Ich bin mir nicht sicher, warum andere das nicht bekommen, - +offset-und wie man es loswerden.
- Ich denke, es passiert, wenn das JDK nicht wissen, den Namen Ihrer Zeitzone - in dem Fall ist es standardmäßig die Anzeige von GMT offset.
- Ah, das macht Sinn. Ich bin bei BOT (GMT-4). Beere in der Tat lebt in Großbritannien (die GMT schon) und du vermutlich auch?
- Ich bin in Irland, also die GMT auch.
- Alle... Das problem ist im code ändert die Standard-Zeitzone, um eine eigene Zeitzone. Ich habe aktualisiert die Frage.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese Frage und die Antworten sind jetzt veraltet. Sie verwenden alte Datum-Zeit-Klassen überholt, die von java.Zeit framework in Java 8 und höher. Die alten Klassen sind schlecht konzipiert, verwirrend und lästig, Vermeiden Sie.
Vermeiden, 3-4 Buchstaben-Zone Codes
Vermeiden, die 3-4 Buchstaben-codes wie
BST
. Sie sind weder standardisiert noch einzigartig. Sie eigentlich gar nicht vertreten Zeitzonen. Und fügen Sie noch mehr Verwirrung in das problem der Sommerzeit (DST).Verwenden Sie stattdessen die richtige Zeitzonen. Die meisten sind
continent/region
format wieEurope/Berlin
.Vermeiden, festlegen von default-Zeitzone
Aufrufen
java.util.TimeZone.setDefault
getan werden sollte nur in den extremsten Fällen. Dieser Aufruf betrifft alle code läuft in allen threads von "alle apps" innerhalb der JVM sofort während Laufzeit.Statt, in der Sie alle Ihre Datum-Zeit-code, geben Sie das gewünschte/erwartete Zeitzone. Wenn weggelassen, Java fällt zurück, indem er implizit Vertrauen auf die JVM die aktuelle Standard-Zeitzone. Wie oben erwähnt dieser Vorgabewert kann sich ändern, jederzeit während der Laufzeit! Stattdessen explizit angeben. Wenn Sie geben Sie Ihren gewünschten/erwarteten Zeit-zone als argument übergeben routinemäßig dann die aktuelle Standard-Zeit-zone ist irrelevant, irrelevant.
java.Zeit
Java.Zeit framework ist in Java 8 und höher. Sehen Tutorial. Definiert durch JSR-310. Inspiriert durch die überaus erfolgreiche Joda-Time-Bibliothek.
Instant
Einer
Instant
einen moment auf der Zeitachse in UTC.Folgende Beispiel zeigt, wie die java.Zeit-Klassen Parsen/generieren von strings standardmäßig, wenn im standard - ISO 8601 - format, ohne Angabe einer Analyse-Muster. Verwenden
DateTimeFormatter
Klasse geben andere nicht-standard-Muster.ZonedDateTime
Anwenden Zeit-zone als erforderlich, wodurch ein
ZonedDateTime
.Erzeugung Von Strings
Können, die Sie produzieren textlichen Darstellungen der ZonedDateTime Objekt mit einem
DateTimeFormatter
. Sie können benutzerdefinierte Muster. Oder, wie ich empfehlen, lassen Sie java.Zeit lokalisieren für Sie.Besten geben Sie die gewünschte/erwartete
Locale
aus dem gleichen Grund wie Zeit-zone... die JVM ist der aktuelle Standard kann geändert werden, in jedem moment von jedem code in jedem thread von jeder app läuft innerhalb der JVM. DieLocale
bestimmt, (a) die menschliche Sprache, in der Namen von day & Monat, und (b) die kulturellen Normen, wie zum Beispiel Kommas versus Fristen und die Reihenfolge der Teile wie Monat oder Tag oder Jahr kommen zum ersten.Über java.Zeit
Den java.Zeit framework ist in Java 8 und höher. Diese Klassen verdrängen die lästige alte legacy Datum-Zeit-Klassen wie
java.util.Date
,Calendar
, &" = SimpleDateFormat
.Den Joda-Time Projekt, jetzt in Wartung-Modus, rät der migration auf die java.Zeit Klassen.
Um mehr zu erfahren, siehe die Oracle Tutorial. Und die Suche Stack Overflow für viele Beispiele und Erklärungen. Spezifikation JSR 310.
Können Sie exchange java.Zeit Objekte direkt mit Ihrer Datenbank. Verwenden Sie eine JDBC-Treiber kompatibel mit JDBC 4.2 oder später. Keine Notwendigkeit für Streicher, keine Notwendigkeit für
java.sql.*
Klassen.Wo erhalten Sie die java.Zeit-Klassen?
Den ThreeTen-Extra Projekt erweitert die java.mal mit zusätzlicher Klassen. Dieses Projekt ist ein Testgelände für mögliche künftige Erweiterungen zu java.Zeit. Sie finden möglicherweise einige nützliche Klassen, die hier wie
Interval
,YearWeek
,YearQuarter
, und mehr.Ich denke, dass du das richtige Muster für Ihre Anforderungen, jedoch ist das JDK nicht wissen, der name der Zeitzone, also es schaltet mit einem GMT-offset-Wert statt.
Wenn ich format ein Datum mit Ihrem Muster, bekomme ich "GMT" für die "timezone" Teil.
Was bedeutet
TimeZone.getDefault().getDisplayName()
geben Sie? Für mich, ich bekomme das "Greenwich Mean Time".TimeZone.getDefault().getDisplayName()
auf meinem Android-Handy, gibt es mirTaipei Standard Time
Da kann ich nicht reproduzieren Sie das problem auf meinem Rechner. Ich denke, dies würde sich über die Lokalisierung. Versuchen Sie, diese
Hoffe, das hilft.
System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z").format(new Date()));
für mich nur zurück2011-11-22 13:42:16 GMT
- also scheint zu funktionieren, wie Sie es wünschen. Sieht aus wie könnte es ein problem an anderer Stelle, sollten Sie nicht brauchen, um erstellen Sie Ihre eigene formatter-Klasse obwohl.Date
/Calendar
), und immer übergeben Sie den optionalenZoneId
argument geben Sie Ihre voraussichtliche/gewünschte zone.Nicht eine elegante Lösung, aber es funktioniert für uns. Ich hatte zum erstellen einer benutzerdefinierten Implementierung für DateFormat/" = SimpleDateFormat. Das sieht aus wie etwas, das Sie wie folgt vor: