Zarządzanie datami kalendarzowymi i godzinamiFlash Player 9 i nowsze wersje, Adobe AIR 1.0 i nowsze wersje Wszystkie funkcje do zarządzania datami kalendarzowymi i godzinami w języku ActionScript 3.0 zostały zebrane w klasie Date zdefiniowanej na najwyższym poziomie. Klasa Date zawiera metody i właściwości umożliwiające pracę z datami i godzinami w strefie czasowej UTC lub w lokalnej strefie czasowej. Czas UTC to standardowa definicja czasu, która jest zasadniczo równoważna czasowi Greenwich (GMT). Tworzenie obiektów klasy DateKlasa Date jest wyposażona w wyjątkowo wszechstronny konstruktor. Można go wywołać na cztery sposoby. Po pierwsze, konstruktor Date() wywołany bez parametrów zwraca obiekt Date zawierający aktualną datę i godzinę w lokalnej strefie czasowej. Oto przykład: var now:Date = new Date(); Po drugie, wywołanie Date() z jednym parametrem liczbowym powoduje, że parametr ten zostanie potraktowany jako liczba milisekund, jaka upłynęła od 1 stycznia 1970 roku i na tej podstawie zostanie utworzony odpowiedni obiekt klasy Date. Przekazywana liczba milisekund liczona jest od 1 stycznia 1970 roku wg czasu UTC. Natomiast zwrócony obiekt Date zawiera wartości właściwe dla lokalnej strefy czasowej. Dopiero użycie metod obsługujących czas UTC umożliwia pobranie i ewentualne wyświetlenie czasu uniwersalnego. Tworząc obiekt Date na podstawie liczby milisekund, należy uwzględnić różnicę między czasem lokalnym a UTC. Poniższe instrukcje tworzą obiekt Date reprezentujący północ w dniu 1 stycznia 1970 roku według czasu UTC: var millisecondsPerDay:int = 1000 * 60 * 60 * 24; // gets a Date one day after the start date of 1/1/1970 var startTime:Date = new Date(millisecondsPerDay); Po trzecie, do konstruktora Date() można przekazać wiele parametrów liczbowych. Parametry te są traktowane odpowiednio jako rok, miesiąc, dzień, godzina, minuty, sekundy i milisekundy, a na ich podstawie tworzony jest odpowiedni obiekt Date. Przyjmuje się, że parametry określają czas lokalny, a nie czas UTC. Poniższa instrukcja tworzy obiekt Date reprezentujący północ rozpoczynającą 1 stycznia 2000 roku w lokalnej strefie czasowej: var millenium:Date = new Date(2000, 0, 1, 0, 0, 0, 0); Po czwarte, do konstruktora Date() można przekazać jeden ciąg znaków. Konstruktor podejmie próbę zinterpretowania tego ciągu jako daty i godziny, a następnie zwróci odpowiedni obiekt Date. W wypadku zastosowania tej techniki wskazane jest ujęcie wywołania konstruktora Date() w blok try..catch, co pozwoli wychwycić ewentualne błędy analizy. Konstruktor Date() jako parametr przyjmuje ciąg znaków w różnych formatach (wymienionych w Skorowidzu języka ActionScript 3.0 dla platformy Adobe Flash). Poniższa instrukcja inicjuje nowy obiekt Date przy użyciu ciągu znaków: var nextDay:Date = new Date("Mon May 1 2006 11:30:00 AM");
Jeśli konstruktor Date() nie będzie mógł pomyślnie przeanalizować ciągu znaków, nie zgłosi wyjątku. Jednak wynikowy obiekt Date będzie zawierał niepoprawną wartość daty. Odczytywanie wartości jednostek czasuKorzystając z właściwości i metod klasy Date, można wyodrębniać wartości różnych jednostek czasu z obiektów Date. Poniższe właściwości zwracają wartości jednostek czasu z obiektu Date:
Operacje arytmetyczne na datach i godzinachIstnieje możliwość dodawania i odejmowania dat i godzin zapisanych w obiektach klasy Date. Wartości obiektów Date są wewnętrznie przechowywane w postaci liczby milisekund, dlatego przed dodawaniem lub odejmowaniem wartości do/od obiektu Date należy przeliczyć te wartości na milisekundy. Jeśli aplikacja ma wykonywać liczne operacje arytmetyczne na datach i godzinach, celowe będzie utworzenie stałych zawierających wartości typowych jednostek czasu wyrażone w milisekundach: public static const millisecondsPerMinute:int = 1000 * 60; public static const millisecondsPerHour:int = 1000 * 60 * 60; public static const millisecondsPerDay:int = 1000 * 60 * 60 * 24; Teraz będzie można wygodnie wykonywać operacje arytmetyczne na datach, korzystając ze standardowych jednostek czasu. Poniższy kod ustawia wartość daty na jedną godzinę później niż bieżący czas. Używane są w tym celu metody getTime() i setTime(): var oneHourFromNow:Date = new Date(); oneHourFromNow.setTime(oneHourFromNow.getTime() + millisecondsPerHour); Inny sposób ustawiania wartości daty polega na utworzeniu nowego obiektu Date z jednym parametrem równym liczbie milisekund. Poniższy kod dodaje 30 dni do jednej daty i tworzy drugą datę: // sets the invoice date to today's date var invoiceDate:Date = new Date(); // adds 30 days to get the due date var dueDate:Date = new Date(invoiceDate.getTime() + (30 * millisecondsPerDay)); Następnie stała millisecondsPerDay jest mnożona przez 30 w celu uzyskania okresu 30 dni, a wynik jest dodawany do wartości invoiceDate i przypisywany wartości dueDate. Konwersja między strefami czasowymiOperacje arytmetyczne na datach i godzinach są przydatne do przeliczania dat między strefami czasowymi. To zadanie wykonuje metoda getTimezoneOffset(), która zwraca liczbę minut, o jaką strefa czasowa obiektu Date różni się od czasu UTC. Wartość jest zwracana w minutach, ponieważ nie wszystkie strefy czasowe różnią się o wielokrotność jednej godziny — niektóre sąsiadujące strefy różnią się o pół godziny. W poniższym przykładzie użyto przesunięcia strefy czasowej do przeliczenia daty z czasu lokalnego na UTC. Konwersja odbywa się poprzez obliczenia wartości strefy czasowej w milisekundach, a następnie skorygowanie wartości Date o tę wartość: // creates a Date in local time
var nextDay:Date = new Date("Mon May 1 2006 11:30:00 AM");
// converts the Date to UTC by adding or subtracting the time zone offset
var offsetMilliseconds:Number = nextDay.getTimezoneOffset() * 60 * 1000;
nextDay.setTime(nextDay.getTime() + offsetMilliseconds);
|
|