Moduł Date::Simple
Uniwersytet Gdański - Instytut Matematyki - Zakład Informatyki - Strona domowaSpis treści
Obsługa modułu Date::Simple
Co to jest
Date::Simple to moduł autorstwa Marty Pauley'a , John Tobey'a oraz Yves Orton'a , służący do różnorakiej obsługi dat. Może być użyty do tworzenia prostych obiektów dat. Kilka możliwości zastosowań:
- Walidacja - sprawdzenie poprawności formatu daty
- Arytmetyka - Ile dni jest pomiędzy dwiema zadanymi datami? Jaka będzie data N dni po zadanej dacie?
- Obliczanie dnia tygodnia - Jaki dzień tygodnia kryje się pod zadaną datą?
- Formatowanie daty - Jak powinna być sformatowana data.
Daty gregoriańskie powyżej roku 9999 są obsługiwane poprawnie, ale Perl polega funkcji localtime, więc na niektórych maszynach możemy się spotkać z ograniczniem do 18 stycznia 2038.
Przeciążanie jest dozwolone, zatem możesz porównywać dwie daty oraz odejmować, używając standardowych operatorów numerycznych, takich jak: ==. Suma daty oraz liczby daje inny obiekt daty.
Obiekty Date::Simple są niezmienne. Po przypisaniu $date1 do $date2, wykonanie zmiany na $date1 nie wywoła zmian na $date2. Oznacza to, że operacja $date++ przypisuje nowy obiekt do $date.
Download
- Pakiet możemy pobrać z CPANu
Instalacja w systemie UNIX'owym
Po rozpakowaniu modułu wydajemy polecenia
perl Makefile.PL
make
make install
Jeżeli wszystko poszło zgodnie z planem, to możemy już korzystać z możliwości naszego nowego modułu. Sprawdzić, czy został pomyślnie zainstalowany możemy, pisząc chociażby takiego jednolinijkowca:
perl -e 'use Date::Simple'
Pomyślne wykonanie programu (żadnych komunikatów) daje nadzieję, że moduł jest zainstalowany i będzie działał.
Konstruktor
Istnieje siedem funkcji, które pobierają w argumencie ciąg znakowy lub numeryczną reprezentację i generują obiekt daty. Najbardziej ogólnym jest new, którego argument może być: pusty, wówczas zwracana jest aktualna data, ciąg znakowy w formacie YYYY-MM-DD lub YYYYMMDD, listą, referencją do tablicy lat, miesięcy oraz dni podanych numerycznie lub też istniejący już obiekt daty.
-
$data = Date::Simple->new ([ARG, ...]) Np.
my $date = Date::Simple->new('1972-01-17');
Metoda new zwróci obiekt daty, jeżeli podane wartości, z których złożona jest data są poprawne, w przeciwnym razie zwróci undef -
$data = date ([ARG, ...]) - jednakże wcześniej należy wpisać:
use Date::Simple (':all');
aby zaimportować wszystkie funkcje publiczne. -
$data = today() - zwraca aktualną datę zgodnie z localtime. Aby utworzyć datę jutrzejszą, należy napisać: today() + 1.
-
$data = ymd (YEAR, MONTH, DAY) - zwraca datę określoną przez liczby w argumencie:
$data = ymd(1987, 12, 18);
Dostępne metody
- $data->next;
my $tomorrow = $today->next;
zwraca obiekt reprezentujący jutro - $data->prev;
my $yesterday = $today->prev;
zwraca obiekt reprezentujący wczoraj - $data->year;
my $year = $date->year;
zwraca rok zadanej daty w formacie liczby (integer) - $data->month;
my $month = $date->month;
zwraca miesiąc zadanej daty w formacie liczby (integer) - $data->day; analogicznie
- $data->day_of_week; zwraca dzień tygodnia zadanej daty w postaci liczby od 0 do 6 (0 - niedziela)
- $data->as_ymd;
my ($year, $month, $day) = $date->as_ymd;
zwraca listę składającą się z trzech liczb: rok, miesiąc, dzień (integer) - $data->as_str([STRING]);$data->format([STRING]);$data->strftime([STRING]);
Powyższe funkcje odpowiadają sobie. Zwracają ciąg znaków reprezentujący datę w określonym formacie. Jeśli nie podasz parametru, domyślnym formatem dla obiektu daty będzie raz wcześniej określony format (jeśli został kiedyś określony), w przeciwnym wypadku będzie używany domyślny format charakterystyczny dla obiektu klasy, do której dany obiekt należy.
my $change_date = $date->format("%d %b %y"); my $iso_date1 = $date->format("%Y-%m-%d"); my $iso_date2 = $date->format;
- $data->default_format ([FORMAT]); Ta metoda ustawia bądź pobiera default_format dla obiektu daty lub klasy, do której jest zawołany.
Użycie operatorów
Niektóre operatory mogą być użyte z instancją klasy Date::Simple. Jeśli jedna strona wyrażenia jest obiektem daty oraz operator oczekuje dwóch obiektów, druga strona jest interpretowana jako date(ARG), zatem referencja do tablicy nadal działa, jak również ISO 8601.- DATE + NUMBER; DATE - NUMBER - pozwala skonstruować datę przesunięta o pewnien offset, który jest liczbą dni
- DATE1 - DATE2 - pozwala odejmować dwie daty w celu znalezienia liczby dni pomiędzy nimi
- DATE1 == DATE2; DATE1 < DATE2; DATE1 <=> DATE2; DATE1 cmp DATE2;DATE1 eq DATE2; etc. - możesz porównywać dwie daty, używając arytmetycznego lub znakowego operatora porównania l
- DATE += NUMBER; DATE -= NUMBER - pozwala zwiększyć (zmniejszyć) datę o zadaną liczbę dni. Tworzony jest nowy obiekt, równoważne z: $date = $date + $number
Dodatki - użyteczne funkcje
- leap_year(YEAR) - zwraca true, jeśli rok jest przestępny
- days_in_month(YEAR, MONTH) - zwraca, liczbę dni w miesiącu w danym roku
Przykłady zastosowań modułu Date::Simple
Ten krótki programik wyświetla aktualną datę oraz wypisuje, jaki to jest dzień tygodnia. Jak również oblicza kilka wartości, które nie są wyświetlane na ekran, sprawdza, czy dziś jest Wigilia.
use Date::Simple ('date', 'today');
# Difference in days between two dates:
$diff = date('2001-08-27') - date('1977-10-05');
# Offset $n days from now:
$date = today() + $n;
print "$date\n"; # uses ISO 8601 format (YYYY-MM-DD)
use Date::Simple ();
my $date = Date::Simple->new('1972-01-17');
my $year = $date->year;
my $month = $date->month;
my $day = $date->day;
use Date::Simple (':all');
my $date2 = ymd($year, $month, $day);
my $date3 = d8('19871218');
my $today = today();
my $tomorrow = $today + 1;
if ($tomorrow->year != $today->year) {
print "Today is New Year's Eve!\n";
}
if ($today > $tomorrow) {
die "warp in space-time continuum";
}
print "Today is ";
print(('Sun','Mon','Tues','Wednes','Thurs','Fri','Satur')[$today->day_of_week]);
print "day.\n";
Dodatkowe informacje
Jest to moduł niezwykle przydatny, gdy ktoś pracuje z datami (tworzenie, przetwarzanie), ponieważ posiada użyteczne metody, które ułatwiają pewne działania.
Macierzysta strona dokumentacji do modułu http://search.cpan.org/~yves/Date-Simple-3.02/lib/Date/Simple.pm#___top
Autor opracowania
Szymon Roziewski
Email: sroziews@manta.univ.gda.pl