Klasa java.util.TimeZone
Świat podzielony jest na strefy czasowe. Nie wystarczy podanie godziny. Należy podać strefę czasową, czy w tej lokalizacji obowiązuje czas letni, a jeśli tak, to czy w danej chwili obowiązuje czy nie.
Klasa abstrakcyjna TimeZone
obsługuje strefy czasowe, ich przesunięcie oraz czas letni.
Konstruktory
.
Ponieważ klasa jest abstrakcyjna obiekt klasy można utworzyć wyłącznie przy użyciu klas fabrycznych.
TimeZone()
Właściwości
Istnieją dwa statyczne pola używane w metodzie getDisplayName()
d o wskazania, czy nazwa strefy czasowej ma być pełna, czy skrócona:
TimeZone.LONG
– pełna nazwa strefy czasowejTimeZone.SHORT
– skrócona nazwa strefy czasowej
Metody
Zwraca | Nazwa | Opis | Listing |
---|---|---|---|
Object | clone() | Tworzy klon tego obiektu TimeZone | – |
String[] | TimeZone.getAvailableIDs() | Tworzy tablicę identyfikatorów wszystkich dostępnych stref czasowych | 019 |
String[] | TimeZone.getAvailableIDs(int offset) | Zwraca tablicę identyfikatorów stref czasowych przesuniętych w stosunku do GMT o podany czas (w milisekundach) | 020 |
TimeZone | TimeZone.getDefault() | Zwraca (sklonowaną) domyślną strefę czasową Java Virtual Machine. Jeśli JVM aktualnie nie ma zbuforowanej strefy czasowej, pobiera strefę (ID) zadeklarowaną we właściwości ‘user.timezone’. Jeśli właściwość jest niedostępna próbuje uzyskać strefę czasową określoną w systemie operacyjnym. Jeśli nie uda się jej uzyskać albo jest nieznana użyta zostanie strefa GMT. Przy powrocie metody ‘user.timezone’ jest ustawiane na ustaloną wartość. | 018 |
TimeZone | TimeZone.setDefault(TimeZone zone) | Podana strefa czasowa ustawiana jest w buforze. Jeśli jest ‘null’ bufor jest czyszczony. Metoda nie zmienia właściwości ‘user.timezone’. | 022 |
String | getID() | Zwraca ID tej strefy czasowej | 021 |
void | setID(String ID) | Ustawia ID tej strefy czasowej na podany | 021 |
String | getDisplayName() | Zwraca nazwę LONG tej strefy w postaci czytelnej dla człowieka, dla domyślnej lokalizacji | 022 |
String | getDisplayName(boolean daylight, int style) | Zwraca nazwę tej strefy w postaci czytelnej dla człowieka w stylu określonym przez ‘style’ i dla domyślnej lokalizacji | 022 |
String | getDisplayName(boolean daylight, int style, Locale locale) | Zwraca nazwę tej strefy w postaci czytelnej dla człowieka, w stylu określonym przez ‘style’ dla podanej lokalizacji. | 022 |
String | getDisplayName(Locale locale) | Zwraca nazwę tej strefy w postaci czytelnej dla człowieka, w stylu LONG dla podanej lokalizacji. | 022 |
int | getRawOffset() | Metoda abstrakcyjna. Zwraca czas w milisekundach, który należy dodać do UTC, aby otrzymać standardowy czas tej strefy czasowej | 023 |
void | setRawOffset(int offsetMillis) | Metoda abstrakcyjna. Ustawia podstawowy czas przesunięcia dla tej strefy czasowej w stosunku do GMT | 023 |
int | getOffset(int era, int year, int month, int day, int dayOfWeek, int milliseconds) | Metoda abstrakcyjna. Określa przesunięcie strefy czasowej dla podanej daty w milisekundach, zmodyfikowaną w przypadku czasu letniego, czyli ile trzeba dodać do UTC, aby otrzymać czas lokalny. Miesiące liczone są od 0. | 024 |
int | getOffset(long date) | Określa przesunięcie tej strefy czasowej w milisekundach względem UTC dla podanej daty | 024 |
int | getDSTSavings() | Zwraca odstęp czasowy, który trzeba dodać do lokalnego czasu standartowego, aby otrzymać czas lokalnego zegara ściennego. Jeśli metoda useDaylightTime() zwraca true, te metoda zwraca 1h=3600000 ms. Jeśli tamta metoda zwraca false, ta metoda zwraca 0. | 025 |
boolean | useDaylightTime() | Metoda abstrakcyjna. Sprawdza czy ta strefa czasowa używa DST. Zwraca ‘true’ jeśli tak, ‘false’ jeśli nie. | 025 |
TimeZone | TimeZone.getTimeZone(String ID) | Zwraca strefę czasową dla podanego ID. ID może być podane jako nazwa skrócona („PST”), pełna („America/Los_Angeles”) lub („GMT-8:00”). Poprawne i zalecane jest użycie nazw pełnych | 026 |
TimeZone | TimeZone.getTimeZone(ZoneId) | Zwraca strefę czasową dla podanego obiektu ZoneId. Będziemy o tej klasie mówić później | 027 |
boolean | hasSameRules(TimeZone other) | Zwraca ‘true’, jeśli ta i porównywana strefa mają te same zasady i przesunięcie albo ‘false’ w przeciwnym wypadku. Jeśli różnią się jedynie ID-em zwracane jest ‘true’ Jeśli ‘other’ jest ‘null’ zwracane jest false. | 028 |
ZoneId | toZoneId() | Konwertuje tę TimeZone do ZoneId. | 027 |
boolean | inDaylightTime(Date date) | Metoda abstrakcyjna. Sprawdza czy podana data wypada w tej strefie czasowej w czasie letnim czy nie. | 028 |
boolean | observesDaylightTime() | Zwraca ‘true’ jeśli strefa jest aktualnie czas letni albo gdy przejście od czas standardowego do letniego jest przewidywane w czasie przyszłym. Domyślna implementacja zwraca ‘true’ jeśli metoda useDaylightTime() zwraca ‘true’ lub inDaylightTime(new Date) zwraca ‘true’ | 028 |
package dt06.java_util_timezone; import java.util.*; public class Listing018 { public static void main(String[] args) { TimeZone tz = TimeZone.getDefault(); System.out.println("tz: " + tz); } }
tz: sun.util.calendar.ZoneInfo[id="Europe/Belgrade",offset=3600000,dstSavings=3600000,useDaylight=true,transitions=119,lastRule=java.util.SimpleTimeZone[id=Europe/Belgrade,offset=3600000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=2,startMonth=2,startDay=-1,startDayOfWeek=1,startTime=3600000,startTimeMode=2,endMode=2,endMonth=9,endDay=-1,endDayOfWeek=1,endTime=3600000,endTimeMode=2]]
package dt06.java_util_timezone; import java.util.*; public class Listing019{ public static void main(String[] args) { String[] tzs = TimeZone.getAvailableIDs(); Arrays.sort(tzs); for(int i = 0; i < tzs.length; i++){ System.out.println((i + 1) + ". " + tzs[i]); } } }
1. ACT 2. AET 3. AGT 4. ART 5. AST 6. Africa/Abidjan ... 625. W-SU 626. WET 627. Zulu
ackage dt06.java_util_timezone; import java.util.*; public class Listing020{ public static void main(String[] args) { String[] tzs = TimeZone.getAvailableIDs(3600000); Arrays.sort(tzs); for(int i = 0; i < tzs.length; i++){ System.out.println(tzs[i]); } } }
Africa/Algiers Africa/Bangui Africa/Brazzaville Africa/Ceuta Africa/Douala Africa/Kinshasa Africa/Lagos Africa/Libreville Africa/Luanda Africa/Malabo Africa/Ndjamena Africa/Niamey Africa/Porto-Novo Africa/Sao_Tome Africa/Tunis Arctic/Longyearbyen Atlantic/Jan_Mayen CET ECT Etc/GMT-1 Europe/Amsterdam Europe/Andorra Europe/Belgrade Europe/Berlin Europe/Bratislava Europe/Brussels Europe/Budapest Europe/Busingen Europe/Copenhagen Europe/Gibraltar Europe/Ljubljana Europe/Luxembourg Europe/Madrid Europe/Malta Europe/Monaco Europe/Oslo Europe/Paris Europe/Podgorica Europe/Prague Europe/Rome Europe/San_Marino Europe/Sarajevo Europe/Skopje Europe/Stockholm Europe/Tirane Europe/Vaduz Europe/Vatican Europe/Vienna Europe/Warsaw Europe/Zagreb Europe/Zurich MET Poland
package dt06.java_util_timezone; import java.util.*; public class Listing021{ public static void main(String[] args) { TimeZone tz = TimeZone.getDefault(); String id = tz.getID(); System.out.println(id); tz.setID("Europe/Warsaw"); String tz1 = tz.getID(); System.out.println(tz1); } }
Europe/Belgrade Europe/Warsaw
package dt06.java_util_timezone; import java.util.*; public class Listing022 { public static void main(String[] args) { TimeZone tz = TimeZone.getDefault(); System.out.println("tz: " + tz); String dn1 = tz.getDisplayName(); System.out.println("dn1: " + dn1); String dn2 = tz.getDisplayName(Locale.GERMANY); System.out.println("dn2: " + dn2); String dn3 = tz.getDisplayName(true, TimeZone.LONG); System.out.println("dn3: " + dn3); String dn4 = tz.getDisplayName(true, TimeZone.SHORT); System.out.println("dn4: " + dn4); String dn5 = tz.getDisplayName(true, TimeZone.LONG, Locale.FRANCE); System.out.println("dn5: " + dn5); } }
tz: sun.util.calendar.ZoneInfo[id="Europe/Belgrade",offset=3600000,dstSavings=3600000,useDaylight=true,transitions=119,lastRule=java.util.SimpleTimeZone[id=Europe/Belgrade,offset=3600000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=2,startMonth=2,startDay=-1,startDayOfWeek=1,startTime=3600000,startTimeMode=2,endMode=2,endMonth=9,endDay=-1,endDayOfWeek=1,endTime=3600000,endTimeMode=2]] dn1: czas środkowoeuropejski standardowy dn2: Mitteleuropäische Normalzeit dn3: czas środkowoeuropejski letni dn4: CEST dn5: heure d’été d’Europe centrale
package dt06.java_util_timezone; import java.util.*; public class Listing023 { public static void main(String[] args) { TimeZone tz = TimeZone.getDefault(); int off = tz.getRawOffset(); System.out.println("off: " + off); tz.setRawOffset(7200000); int off1 = tz.getRawOffset(); System.out.println("off1: " + off1); } }
off: 3600000 off1: 7200000
package dt06.java_util_timezone; import java.util.*; public class Listing024 { public static void main(String[] args) { TimeZone tz = TimeZone.getDefault(); int off1 = tz.getOffset(GregorianCalendar.AD, 1952, 5, 4, Calendar.WEDNESDAY, 0); System.out.println("off1:" + off1); //- TimeZone tz1 = TimeZone.getDefault(); GregorianCalendar cal = new GregorianCalendar(); long millis = cal.getTimeInMillis(); int off2 = tz1.getOffset(millis); System.out.println("off2: " + off2); } }
off1:3600000 off2: 7200000
package dt06.java_util_timezone; import java.util.*; public class Listing025 { public static void main(String[] args) { TimeZone tz = TimeZone.getDefault(); boolean dt = tz.useDaylightTime(); System.out.println("dt: " + dt); int dst = tz.getDSTSavings(); System.out.println("dst: " + dst); } }
dt: true dst: 3600000
package dt06.java_util_timezone; import java.util.*; public class Listing026 { public static void main(String[] args) { TimeZone tz = TimeZone.getTimeZone("Europe/Warsaw"); System.out.println("tz: " + tz); // TimeZone tz1 = TimeZone.getTimeZone("GreenDragonZone"); tz1.setID("GDT"); tz1.setRawOffset(60000); System.out.println("tz1: " + tz1); System.out.println(tz1.getDisplayName()); } }
tz: sun.util.calendar.ZoneInfo[id="Europe/Warsaw",offset=3600000,dstSavings=3600000,useDaylight=true,transitions=165,lastRule=java.util.SimpleTimeZone[id=Europe/Warsaw,offset=3600000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=2,startMonth=2,startDay=-1,startDayOfWeek=1,startTime=3600000,startTimeMode=2,endMode=2,endMonth=9,endDay=-1,endDayOfWeek=1,endTime=3600000,endTimeMode=2]] tz1: sun.util.calendar.ZoneInfo[id="GDT",offset=60000,dstSavings=0,useDaylight=false,transitions=0,lastRule=null] GMT+00:01
package dt06.java_util_timezone; import java.time.*; import java.util.*; public class Listing027 { public static void main(String[] args) { TimeZone tz = TimeZone.getTimeZone(ZoneId.of("Europe/Warsaw")); System.out.println("tz: " + tz); ZoneId tzId = tz.toZoneId(); System.out.println("tzId: " + tzId); } }
tz: sun.util.calendar.ZoneInfo[id="Europe/Warsaw",offset=3600000,dstSavings=3600000,useDaylight=true,transitions=165,lastRule=java.util.SimpleTimeZone[id=Europe/Warsaw,offset=3600000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=2,startMonth=2,startDay=-1,startDayOfWeek=1,startTime=3600000,startTimeMode=2,endMode=2,endMonth=9,endDay=-1,endDayOfWeek=1,endTime=3600000,endTimeMode=2]] tzId: Europe/Warsaw
package dt06.java_util_timezone; import java.util.*; public class Listing028 { public static void main(String[] args) { TimeZone tz = TimeZone.getDefault(); TimeZone tz1 = TimeZone.getTimeZone("Europe/Oslo"); boolean rules = tz.hasSameRules(tz1); System.out.println("rules: " + rules); //- boolean obs = tz.observesDaylightTime(); System.out.println("obs: " + obs); //- GregorianCalendar gd = new GregorianCalendar(); long millis = gd.getTimeInMillis(); Date date = new Date(millis); boolean op = tz.inDaylightTime(date); System.out.println("op: " + op); //- } }
rules: false obs: true op: true