1. Einführung in TimeZone
TimeZone repräsentiert den Zeitzonenversatz und kann auch Tageslichtsparenzeit berechnen.
Timezone wird häufig verwendet, wenn Objekte, die Daten/Zeiten wie Datum, Kalender usw. darstellen, darstellen; Weil verschiedene Zeitzonen unterschiedliche Zeiten haben.
Sprechen wir über zwei allgemeine Möglichkeiten, Zeitzone -Objekte zu erstellen.
1. Holen Sie sich das Standard -Timezone -Objekt
Wie man verwendet:
TimeZone TZ = TimeZone.getDefault ()
2. Verwenden Sie die Methode GetTimeZone (String ID), um ein Timezone -Objekt zu erhalten
Wie man verwendet:
// Erhalten Sie die Zeitzone, die "GMT+08: 00" Timezone China = TimeZone.GetTimeZone ("GMT+: 08: 00") entspricht. Für die Werte aller ID -Parameter, die von GetTimeZone (String -ID) unterstützt werden, finden Sie sie auf folgende Weise:
String [] ids = timezone.getAavleLableableIds (); für (String -ID: ids) system.out.printf (id+",");
Ausgangsergebnis:
Etc/gmt+12 usw./gmt+11, pazifisch/auf halbem Weg, pazifisch/niue ... usw.Erstellen Sie beispielsweise die Timezone, die dem zweiten Druckwert "usw./gmt+11" oben entspricht. Die Methode lautet wie folgt:
TimeZone TZ = TimeZone.getTimeZone ("etc/gmt+11"); TimeZone -Funktionsschnittstelle // Konstruktor TimeZone ():Objekt Clone () Synchronisierte statische String [] GetAvailableIds () Synchronisierte statische String [] GetAvailableIds (int offsetmillis) int getdstsavings () Synchronisierte statische TimeZone -Final -Sting -Sting -Sting -Sting -Sting -Sting -Sting -Sting -Sting -Sting -Sting -Sting -Sting -Sting -Sting -Sting -Sting -Sting -Sting -Sting -Sting -Sting -Sting -Sting -Sting -Style -Sting -Sting -Style -Sting -Sting -Style -Sting -Sting -Style -Sting -Style -Sting -Style -Sting -Style -Sting -Style -Sting -Style -Sting -Style -Style -Style -Style -Style -Style -Style -Style -Style -Style -. getDisplayName(boolean daylightTime, int style)String getID()abstract int getOffset(int era, int year, int month, int day, int dayOfWeek, int timeOfDayMillis)int getOffset(long time)abstract int getRawOffset()synchronized static TimeZone getTimeZone(String id)boolean hasSameRules(TimeZone timeZone)abstract boolean Indaylighttime (Datumszeit) Synchronisierte statische Void -SetDefault (TimeZone TimeZone) Void SetID (String ID) Abstract Void SetRawoffset (int OffsetMillis) Abstract Boolean UsedayLighttime ()
2. TimeZone Beispiel:
Das Folgende ist ein Beispiel, um die Verwendung von TimeZone in Datum zu demonstrieren.
Der Referenzcode ist wie folgt (TimeZonetest.java):
importieren java.text.dateFormat; import java.util.date; import java.util.timezone;/*** TimeZone -Testprogramm*/public class timezonetest {public static void main (String [] args) {// Test 3 Methoden zum Erstellen von TimeZone -Objekte -ShowusageofTimezones (); // andere APIs von Timezone testotherapis () testen; // Alle IDs drucken, die von GetTimeZone (String -ID) unterstützt werden // printalltimezones (); } / *** Testen Sie 3 Methoden zum Erstellen von Zeitzone -Objekten* / public static void ShowUsageofTimeZones () {TimeZone TZ; // (01) Standardzeitzone TZ = TimeZone.getDefault (); printdatein (TZ); // (02) Legen Sie die Zeitzone auf "GMT+08: 00" TZ = TimeZone.getTimeZone ("GMT+08: 00"); printdatein (TZ); // (03) Setzen Sie die Zeitzone auf "" "Tz = TimeZone.getTimeZone (" Asien/Chongqing "); printdatein (TZ); }/*** Drucken Sie das Datum/die Uhrzeit, das TZ entspricht*/privat statische void printdatein (Zeitzone TZ) {// Datum ist 2013-09-19 14:22:30 Datum = neues Datum (113, 8, 19, 14, 22, 30); // das Standarddatumformat für Formatierungsdatum -DatumFormat df = dateFormat.getInstance () abrufen; // die Zeitzone auf TZ df.settimezone (TZ) einstellen; // Die formatierte String String str = df.format (Datum) abrufen; System.out.println (tz.getId ()+":"+str); } / ** * Tester TimeZone's andere APIs * / public static void testotherapis () {// Standardzeitzonen Timezone Tz = timezone.getDefault (); // "id" String id = tz.getId (); // "Anzeigename" String name = tz.getDisplayName (); // Erhalten Sie "Zeitversatz". Der Versatz im Vergleich zum "primären Meridian" ist MS. int offset = tz.getRawoffset (); // Erhalten Sie die entsprechende Stunde "Zeitversetzt" int gmt = offset/(3600*1000); System.out.printf ("id =%s, name =%s, offset =%s (ms), gmt =%s/n", id, name, offset, gmt); } / ** * Drucken Sie alle IDs, die von GetTimeZone (String -ID) unterstützt werden, * / public static void printAmleTimeZones () {String [] ids = timezone.getAVailableLableIds (); für (String -ID: ids) {// int offset = timezone.getTimeZone (avaids [i]). getRawoffset (); //System.out.println(i+ ""+avaids [i]+""+offset/(3600 * 1000)+"/t"); System.out.printf (id+","); } System.out.println (); }}
3.. Über Zeitzone und Zeitkalibrierung
Java und Solaris sind sehr ähnlich, wenn es um Informationen über Zeitzonen geht. Jede Zeitzone verfügt über eine Zeitzonen -ID -Kennung. In J2SE 1.3 und 1.4 ist diese ID eine Zeichenfolge, eine Liste dieser IDs im JRE/Lib -Unterverzeichnis des J2SE -Installationsprogramms. J2SE 1.3 enthält nur TzMappings -Dateien, aber J2SE 1.4 enthält Zeitzonendatendateien in verschiedenen Regionen der Welt. JRE/lib/zi speichert diese Dateien. In J2SE 1.4 erhält Sun.util.calendar.zoneinfo DST -Regeln aus diesen Dateien. In Solaris werden diese Zeitzonendatendateien in Binärform gespeichert und sind keine Textdateien, sodass Sie sie nicht ansehen können. Die Zeitzonendatendatei in J2SE 1.4 unterscheidet sich von der in Solaris.
Der Quellcode der GetDefault -Methode in der Klasse java.util.timezone zeigt, dass sie schließlich die GetTimezone -Methode der Sonne aufrufen wird. Diese Methode gibt einen String -Parameter als ID für den erforderlichen Zeitbereich zurück. Diese Standard -Zeitzonen -ID der Zeitzone wird von der Eigenschaft user.timezone (System) erhalten. Wenn user.timeZone nicht definiert ist, wird versucht, die ID von der Eigenschaften von User.country und Java.Home (System) zu erhalten. Wenn es keine Zeitzonen -ID findet, verwendet es einen GMT -Wert "Fallback". Mit anderen Worten, wenn es Ihre Zeitzonen -ID nicht berechnet, wird GMT als Standardzeitzone verwendet.
Beachten Sie, dass die Systemeigenschaft in der InitProperties -Methode der Java.lang.System -Klasse initialisiert wird. Dies ist eine lokale Methode. Daher ist der Quellcode nicht verfügbar-es sei denn, Sie graben in der lokalen Codebasis im J2SE-Verteilungspaket ein, um zu untersuchen. In Windows -Systemen wird das Systemattribut jedoch aus der Windows -Registrierung initialisiert, während es unter Linux/UNIX durch Umgebungsvariablen initialisiert wird. Die Javadoc -Erklärung der InitProperties -Methode, bestimmte Eigenschaften "müssen garantiert definiert werden" und diese auflisten. Von den drei Systemeigenschaften, die von der GetDefault -Methode der Java.util.TimeZone -Klasse verwendet werden, ist nur Java.Home in Javadoc als "garantierte" Eigenschaft aufgeführt.
Empfohlene Lösungen:
Wie stellen Sie sicher, dass Java Ihnen die richtige Zeit und Datum gibt? Am besten bestätigen Sie, dass die Standard -Timezone -Klasse von Java Virtual Machine (JVM) korrekt ist und für Ihr geografisches Zielfernrohr (Gebietsschema) geeignet ist. Wie stellen Sie sicher, dass die Standard -Zeitzone korrekt und geeignet ist? Dies ist ein weiteres neues Problem. Wie die meisten Probleme haben dies viele Lösungen. Gemäß dem Quellcode der Methode java.util.timezone.getDefault besteht der beste Weg darin, die Eigenschaft der Benutzer korrekt festzulegen. Beim Starten der Java Virtual Machine können Sie den Wert, der in der Methode der java.lang.System.initProperties festgelegt wird, einfach überschreiben, indem Sie den Parameter des Befehlszeilens -ds verwenden. Zum Beispiel:
Java -Duser.TimeZone = Asien/Shanghai DateTest
Dieser Befehl startet die DateTest -Klasse und legt die Eigenschaft von User.timeZone in Asien/Shanghai fest. Sie können die Eigenschaft user.timeZone auch mit der SetProperty -Methode der Java.lang.System -Klasse einstellen:
System.setProperty ("user.timezone", "asia/shanghai");Wenn Sie keine Zeitzonen -ID verfügbar sind, können Sie eine benutzerdefinierte Zeitzone mit der SetDefault -Methode der Java.util.Timezone -Klasse erstellen, um sie auf die Standardzeit festzulegen Zone-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Denken Sie daran, dass in J2SE die meisten Klassen im Zusammenhang mit Datum und zeitlichen Klassen Zeitzoneninformationen enthalten, einschließlich dieser Formatklassen wie java.text.dateFormat, sodass sie alle von der Standardzeitzone des JVM betroffen sind. Wenn Sie jedoch Instanzen dieser Klassen erstellen, können Sie die richtigen Zeitzoneninformationen dafür sicherstellen, dass Sie die Standardzeitzone des gesamten JVM leichter festlegen. Und sobald Sie eingerichtet sind, können Sie sicherstellen, dass alle diese Klassen dieselbe Standardzeitzone verwenden.