Klasa java.util.SimpleTimeZone

Klasa SimpleTimeZone jest klasą dziedziczącą po TimeZone. Reprezentuje strefy czasowe przeznaczone do użycia z klasą GregorianCalendar. Klasa zawiera opis przesunięcia względem GMT, nazywanego rawOffset (przesunięcie surowe – czyli liczone w stosunku do czasu standardowego). Zawiera również schemat zasad wprowadzania czasu letniego (start rule) oraz powrotu do czasu zimowego (end rule). Klasa zawiera informacje tylko dla jednego zbioru zasad start rule i jednego end rule, czyli uwzględnia jedynie ostatnie znane reguły. Można jednak ustawić setStartYear, który określa rok wprowadzenia tego jednego schematu. W Polsce np. zasada wprowadzania czasu letniego w ostatnią niedzielę marca o godzinie 02:00 (+01:00) i powrotu do czasu zimowego w ostatnią niedzielę października o godz 03:00 (-01:00) obowiązuje od roku 1996.

Konstruktory

  1. SimpleTimeZone(int rawOffset, String ID) – strefa czasowa bez schematu zmian czasu na letni i z powrotem
  2. SimpleTimeZone(int rawOffset, String ID, int startMonth, int startDay, int startDayOfWeek, int startTime, int endMonth, int endDay, int endDayOfWeek, int endTime) – przesunięcie domyślnie o 3600000 milisekund, domyślny czas ścienny
  3. SimpleTimeZone(int rawOffset, String ID, int startMonth, int startDay, int startDayOfWeek, int startTime, int endMonth, int endDay, int endDayOfWeek, int endTime, int dstSavings) – domyślny czas ścienny
  4. SimpleTimeZone(int rawOffset, String ID, int startMonth, int startDay, int startDayOfWeek, int startTime, int startTimeMode, int endMonth, int endDay, int endDayOfWeek, int endTime, int, endTimeMode, int dstSavings)

Parametry konstruktorów oznaczają:

Zestawienie parametrów konstruktorów klasy java.util.SimpleTimeZone
Typ Nazwa Opis
int rawOffset Przesunięcie czasu standardowego strefy czasowej względem GMT w milisekundach
String ID Identyfikator strefy czasowej
int startMonth Miesiąc wprowadzenia czasu letniego (miesiące liczone są od 0 do 11)
int startDay Numer dnia miesiąca wprowadzenia czasu letniego – liczone od 0. Zobacz opis pod tabelą.
int startDayOfWeek Numer dnia tygodnia wprowadzenia czasu letniego. Zobacz opis pod tabelą.
int startTime Godzina na ściennym zegarze, o której dokonywana jest zmiana czasu na letni – w milisekundach od początku dnia (jest to aktualny czas standardowy, a więc zimowy)
int endMonth Miesiąc powrotu do czasu zimowego
int endDay Dzień miesiąca powrotu do czasu zimowego. Zobacz opis pod tabelą
int endDayOfWeek Numer dnia tygodnia powrotu do czasu zimowego. Zobacz opis pod tabelą
int endTime Godzina na zegarze ściennym, o której zostanie prowadzona zmiana – w milisekundach od początku dnia
int dstSavings Odcinek czasu w milisekundach, o który przesuwany jest czas
int startTimeMode Tryb podawania czasu startTime
int endTimeMode Tryb podawania czasu endTime

Wyjaśnienia do tabeli:

  • Jeżeli czas letni zaczyna się 1 marca: startMonth=2, startDay=1, startDayOfWeek=0.
  • Jeżeli czas letni zaczyna się w drugą niedzielę kwietnia: startMonth=3, startDay=8,startDayOfWeek=(-)7.
  • Jeżeli czas letni zaczyna się w ostatnią środę przed 21 marca (albo w środę 21 marca): startMonth=2, startDayOfMonth=(-)21, startDayOfWeek=(-)3
  • Jeśli czas zimowy zaczyna się w ostatnią niedzielę października: startMonth=9, startDayOfWeek=7, startDayOfMonth(-)1
Przyklady
package dt07.java_util_simpletimezone;
import java.util.*;
public class Listing029 {
    public static void main(String[] args) {
        SimpleTimeZone stz = new SimpleTimeZone(-28800000,
                "America/Los_Angeles", Calendar.APRIL, 1, -Calendar.SUNDAY,
                7200000, Calendar.OCTOBER, -1, Calendar.SUNDAY, 7200000,
                3600000);
        System.out.println("stz: " + stz);
    }
}

Objaśnienia parametrów:
Użycie konstruktora 3 – przykład z dokumentacji klasy

  • rowOffset =(-)8.00h = 8 x 3600000 = – 28800000
  • ID = „America/Los_Angeles”
  • DST zaczyna się w pierwszą niedzielę kwietnia o 2:00 w nocy:
  • startMonth = 3 = Calendar.APRIL
  • startDay = 1
  • startDayOfWeek=-1 = -Calendar.SUNDAY
  • startTime= 2×3600000 = 7200000
  • DST kończy się w ostatnią niedzielę października o godz. 2:00 w nocy:
  • endMonth = 9 = Calendar.OCTOBER
  • startDay = -1
  • startDayofWeek= 1 = Calendar.SUNDAY
  • startTime=2 x 3600000 = 7200000
  • dstSavings=3600000
stz: java.util.SimpleTimeZone[id=America/Los_Angeles,offset=-28800000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=3,startMonth=3,startDay=1,startDayOfWeek=1,startTime=7200000,startTimeMode=0,endMode=2,endMonth=9,endDay=-1,endDayOfWeek=1,endTime=7200000,endTimeMode=0]
package dt07.java_util_simpletimezone;
import java.util.*;
public class Listing030 {
    public static void main(String[] args) {
        SimpleTimeZone stz = new SimpleTimeZone(3600000, "Europe/Paris",
                Calendar.MARCH, -1, Calendar.SUNDAY, 3600000,
                SimpleTimeZone.UTC_TIME, Calendar.OCTOBER, -1, Calendar.SUNDAY,
                3600000, SimpleTimeZone.UTC_TIME, 3600000);
        System.out.println("stz: " + stz);
    }
}

Objaśnienia parametrów:
Użycie konstruktora 4 – przykład z dokumentacji klasy.

  • rowOffset =1.00h = 1 x 3600000 = 3600000
  • ID = „Europe/Paris”
  • DST zaczyna się w ostatnią sobotę marca o godz. 1:00 UTC:
  • startMonth = 2 = Calendar.MARCH
  • startDay = -1
  • startDayOfWeek=1 = Calendar.SUNDAY
  • startTime= 1×3600000 = 3600000
  • startTimeMode= 2 = SimpleTimeZone.UTC_TIME
  • DST kończy się w ostatnią niedzielę października o godz. 1:00 UTC:
  • endMonth = 9 = Calendar.OCTOBER
  • startDay = -1
  • startDayofWeek= 1 = Calendar.SUNDAY
  • endTimeMode = 2 = SimpleTimezone.UTC_TIME
  • startTime=1 x 3600000=3600000
  • dstSavings=3600000
stz: java.util.SimpleTimeZone[id=Europe/Paris,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 dt07.java_util_simpletimezone;
import java.util.*;
public class Listing031 {
    public static void main(String[] args) {
        SimpleTimeZone stz = new SimpleTimeZone(3600000, "Europe/Warsaw",
                Calendar.MARCH, -1, Calendar.SUNDAY, 7200000,
                SimpleTimeZone.WALL_TIME, Calendar.OCTOBER, -1, Calendar.SUNDAY,
                10800000, SimpleTimeZone.WALL_TIME, 3600000);
        stz.setStartYear(1996);
        System.out.println("stz: " + stz);
    }
}

Objaśnienie parametrów:
Strefa dla Warszawy:

  • rowOffset =1.00h = 1 x 3600000 = 3600000
  • ID = „Europe/Warsaw”
  • DST zaczyna się w ostatnią niedzielę marca o godz. 2:00 zegarowej:
  • startMonth = 2 = Calendar.MARCH
  • startDay = -1
  • startDayOfWeek=1 = Calendar.SUNDAY
  • startTime= 2 x 3600000 = 3600000
  • startTimeMode = 0 = SimpleTimeZone.WALL_TIME
  • DST kończy się w ostatnią niedzielę października o godz. 3:00 zegarowej:
  • endMonth = 9 = Calendar.OCTOBER
  • startDay = -1
  • startDayofWeek= 1 = Calendar.SUNDAY
  • endTimeMode = 0 = SimpleTimezone.WALL_TIME
  • startTime=3 x 3600000=10800000
  • dstSavings=3600000
stz: java.util.SimpleTimeZone[id=Europe/Warsaw,offset=3600000,dstSavings=3600000,useDaylight=true,startYear=1996,startMode=2,startMonth=2,startDay=-1,startDayOfWeek=1,startTime=7200000,startTimeMode=0,endMode=2,endMonth=9,endDay=-1,endDayOfWeek=1,endTime=10800000,endTimeMode=0]

Właściwości

Godzinę możemy podać używając trybu:

  • WALL_TIME – czas wskazywany przez zegar ścienny
  • STANDARD_TIME – czas standardowy (zimowy)
  • UTC_TIME – czas UTC
  • Metody

    Metody klasy java.util.SimpleTimeZone
    Zwraca Metoda Opis Listing
    Object clone() Zwraca klon tego strefy czasowej
    boolean equals(Object obj) Zwraca ‘true’ jeśli ‘obj’ równa się temu obiektowi strefy czasowej
    int hashCode() Zwraca kod mieszający dla tego obiektu strefy czasowej
    String toString() Zwraca łańcuch znaków da tego obiektu strefy czasowej niemal każdy
    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. 032
    void setDSTSavings (int millisSavedDuringDST) Pozwala na ustawienie odstępu czasowego, który trzeba dodać do lokalnego czasu standardowego, aby otrzymać czas lokalnego zegara ściennego.
    int getOffset(int era, int year, int month, int day, int dayOfWeek, int millis) 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. 033
    int getOffset(long date) Określa przesunięcie tej strefy czasowej w milisekundach względem UTC dla podanej daty 033
    int getRawOffset() Zwraca czas w milisekundach, który należy dodać do UTC, aby otrzymać standardowy czas tej strefy czasowej 034
    void setRawOffset(int millis)

    Ustawia podstawowy czas przesunięcia dla tej strefy czasowej w stosunku do GMT

    034
    int setStartYear(int year)

    Rok od którego obowiązują podane reguły czasu

    035
    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. 035
    boolean inDaylightTime(Date date) Sprawdza czy podana data wypada w tej strefie czasowej w czasie letnim czy nie. 035
    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’ 035
    boolean useDaylightTime() Sprawdza czy ta strefa czasowa używa DST. Zwraca ‘true’ jeśli tak, ‘false’ jeśli nie. 032
    void setStartRule(int startMonth, int startDay, int startTime) Ustawienie reguł wprowadzenia czasu letniego 036
    void setStartRule(int startMonth, int startDay, int startDayOfWeek, int startTime) Ustawienie reguł wprowadzenia czasu letniego 037
    void setStartRule(int startMonth, int startDay, int startDayOfWeek, int startTime, boolean after) Ustawienie reguł wprowadzenia czasu letniego 038
    void setEndRule(int endMonth, int endDay, int endTime) Ustawienie reguł wprowadzenia czasu zimowego 036
    void setEndRule(int endMonth, int endDay, int endDayOfWeek, int endTime) Ustawienie reguł wprowadzenia czasu zimowego 037
    void setEndRule(int endMonth, int endtDay, int endDayOfWeek, int endTime, boolean after) Ustawienie reguł wprowadzenia czasu zimowego 038
    Przykłady
    package dt07.java_util_simpletimezone;
    import java.util.*;
    public class Listing032 {
        public static void main(String[] args) {
            SimpleTimeZone stz = new SimpleTimeZone(3600000, "Europe/Warsaw",
                    Calendar.MARCH, -1, Calendar.SUNDAY, 7200000,
                    SimpleTimeZone.WALL_TIME, Calendar.OCTOBER, -1, Calendar.SUNDAY,
                    10800000, SimpleTimeZone.WALL_TIME, 3600000);
            stz.setStartYear(1996);
            //System.out.println(stz);
            boolean dt = stz.useDaylightTime();
            System.out.println("dt: " + dt);
            int dst = stz.getDSTSavings();
            System.out.println("dst: " + dst);
        }
    }
    
    dt: true
    dst: 3600000
    
    package dt07.java_util_simpletimezone;
    import java.util.*;
    public class Listing033 {
        public static void main(String[] args) {
            SimpleTimeZone stz = new SimpleTimeZone(3600000, "Europe/Warsaw",
                    Calendar.MARCH, -1, Calendar.SUNDAY, 7200000,
                    SimpleTimeZone.WALL_TIME, Calendar.OCTOBER, -1, Calendar.SUNDAY,
                    10800000, SimpleTimeZone.WALL_TIME, 3600000);
            stz.setStartYear(1996);
            int off1 = stz.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 dt07.java_util_simpletimezone;
    import java.util.*;
    public class Listing034 {
        public static void main(String[] args) {
            SimpleTimeZone stz = new SimpleTimeZone(3600000, "Europe/Warsaw",
                    Calendar.MARCH, -1, Calendar.SUNDAY, 7200000,
                    SimpleTimeZone.WALL_TIME, Calendar.OCTOBER, -1, Calendar.SUNDAY,
                    10800000, SimpleTimeZone.WALL_TIME, 3600000);
            stz.setStartYear(1996);
            //
            int off = stz.getRawOffset();
            System.out.println("off: " + off);
            stz.setRawOffset(7200000);
            int off1 = stz.getRawOffset();
            System.out.println("off1: " + off1);
        }
    }
    
    off: 3600000
    off1: 7200000
    
    package dt07.java_util_simpletimezone;
    import java.util.*;
    public class Listing035 {
        public static void main(String[] args) {
            SimpleTimeZone stz = new SimpleTimeZone(3600000, "Europe/Warsaw",
                    Calendar.MARCH, -1, Calendar.SUNDAY, 7200000,
                    SimpleTimeZone.WALL_TIME, Calendar.OCTOBER, -1, Calendar.SUNDAY,
                    10800000, SimpleTimeZone.WALL_TIME, 3600000);
            stz.setStartYear(1996);
            //
            TimeZone tz1 = TimeZone.getTimeZone("Europe/Oslo");
            boolean rules = stz.hasSameRules(tz1);
            System.out.println("rules: " + rules);
            //-
            boolean obs = stz.observesDaylightTime();
            System.out.println("obs: " + obs);
            //-
            GregorianCalendar gd = new GregorianCalendar();
            long millis = gd.getTimeInMillis();
            Date date = new Date(millis);
            boolean op = stz.inDaylightTime(date);
            System.out.println("op: " + op);
            //-
        }
    }
    
    rules: false
    obs: true
    op: true
    
    package dt07.java_util_simpletimezone;
    import java.util.*;
    public class Listing036 {
        public static void main(String[] args) {
            SimpleTimeZone stz = new SimpleTimeZone(3600000, "Europe/Pruszkow");
            //start 3 kwietnia godz 2:00 zegara ściennego
            stz.setStartRule(Calendar.APRIL, 3, 7200000);
            //end 21 października, godz. 3:00 zegara ściennego
            stz.setEndRule(Calendar.APRIL, 21, 10800000);
            System.out.println("stz: " + stz);
        }
    }
    
    stz: java.util.SimpleTimeZone[id=Europe/Pruszkow,offset=3600000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=1,startMonth=3,startDay=3,startDayOfWeek=0,startTime=7200000,startTimeMode=0,endMode=1,endMonth=3,endDay=21,endDayOfWeek=0,endTime=10800000,endTimeMode=0]
    package dt07.java_util_simpletimezone;
    import java.util.*;
    public class Listing037 {
        public static void main(String[] args) {
            SimpleTimeZone stz = new SimpleTimeZone(3600000, "Europe/Pruszkow");
            //start 3 kwietnia godz 2:00 zegara ściennego
            stz.setStartRule(Calendar.APRIL, 3, 0, 7200000);
            //end 21 października, godz. 3:00 zegara ściennego
            stz.setEndRule(Calendar.APRIL, 21, 0, 10800000);
            System.out.println("stz: " + stz);
            //-
            SimpleTimeZone stz1 = new SimpleTimeZone(3600000, "Europe/Pruszkow");
            //start I niedziela kwietnia godz. 2:00 zegara ściennego
            stz1.setStartRule(Calendar.APRIL, 1, Calendar.SUNDAY, 7200000);
            //end ostatnia niedziela października, godz. 3:00 zegara ściennego
            stz1.setEndRule(Calendar.OCTOBER, -1, Calendar.SUNDAY, 10800000);
        }
    }
    
    stz: java.util.SimpleTimeZone[id=Europe/Pruszkow,offset=3600000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=1,startMonth=3,startDay=3,startDayOfWeek=0,startTime=7200000,startTimeMode=0,endMode=1,endMonth=3,endDay=21,endDayOfWeek=0,endTime=10800000,endTimeMode=0]
    
    package dt07.java_util_simpletimezone;
    import java.util.*;
    public class Listing038 {
        public static void main(String[] args) {
            SimpleTimeZone stz = new SimpleTimeZone(3600000, "Europe/Pruszkow");
            //start w pierwszą niedzielę po 15 kwietnia o 2:00 zegara ściennego;
            //również gdy niedziela przypada 15 kwietnia
            stz.setStartRule(Calendar.APRIL, 15, Calendar.SUNDAY, 7200000, true);
            //end pierwsza niedziela po 15 października godz. 3:00 zegara ściennego
            //również gdy niedziela przypada 15 października
            stz.setEndRule(Calendar.OCTOBER, 15, Calendar.SUNDAY, 10800000, true);
            System.out.println("stz: " + stz);
            //
            SimpleTimeZone stz1 = new SimpleTimeZone(3600000, "Europe/Pruszkow");
            //start w ostatnią niedzielę przed 15 kwietnia o 2:00 zegara ściennego;
            //również gdy niedziela przypada 15 kwietnia
            stz1.setStartRule(Calendar.APRIL, 15, Calendar.SUNDAY, 7200000, false);
            //end pierwsza niedziela przed 15 października godz. 3:00 zegara ściennego
            //również gdy niedziela przypada 15 października
            stz1.setEndRule(Calendar.OCTOBER, 15, Calendar.SUNDAY, 10800000, false);
            System.out.println("stz1: " + stz1);
        }
    }
    
    stz: java.util.SimpleTimeZone[id=Europe/Pruszkow,offset=3600000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=3,startMonth=3,startDay=15,startDayOfWeek=1,startTime=7200000,startTimeMode=0,endMode=3,endMonth=9,endDay=15,endDayOfWeek=1,endTime=10800000,endTimeMode=0]
    stz1: java.util.SimpleTimeZone[id=Europe/Pruszkow,offset=3600000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=4,startMonth=3,startDay=15,startDayOfWeek=1,startTime=7200000,startTimeMode=0,endMode=4,endMonth=9,endDay=15,endDayOfWeek=1,endTime=10800000,endTimeMode=0]
    

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *