Czas lokalny: jak określić aktualny czas w Perl
STOCK4B / Getty Images
Perlma przydatną wbudowaną funkcję wyszukiwania bieżącej daty i godziny w skryptach. Jednak gdy mówimy o znalezieniu czasu, mówimy o czasie, który jest aktualnie ustawiony na maszynie, na której działa skrypt. Na przykład, jeśli uruchamiasz skrypt Perla na swoim komputerze lokalnym, czas lokalny zwróci aktualny czas, który ustawiłeś i prawdopodobnie zostanie ustawiony na bieżącą strefę czasową.
Po uruchomieniu tego samego skryptu na serwerze internetowym może się okazać, że czas lokalny jest wyłączony z czasu lokalnego w systemie stacjonarnym. Serwer może znajdować się w innej strefie czasowej lub być nieprawidłowo ustawiony. Każda maszyna może mieć zupełnie inne wyobrażenie o tym, czym jest czas lokalny i może wymagać pewnych dostosowań, zarówno w skrypcie, jak i na samym serwerze, aby dopasować go do tego, czego oczekujesz.
Funkcja localtime zwraca listę pełną danych o aktualnym czasie, z których część będzie wymagała dostosowania. Uruchom poniższy program, a zobaczysz każdy element na liście wydrukowany w wierszu i oddzielony spacjami.
#!/usr/local/bin/perl
@timeData = czas lokalny(czas);
print join(' ', @timeData);
Powinieneś zobaczyć coś podobnego do tego, chociaż liczba może być bardzo różna.
20 36 8 27 11 105 2 360 0
Te elementy aktualnego czasu to w kolejności:
- Sekundy po minucie
- Minuty po godzinie
- Godziny po północy
- Dzień miesiąca
- Miesiące po rozpoczęciu roku
- Liczba lat od 1900
- Liczba dni od początku tygodnia (niedziela)
- Liczba dni od początku roku
- Tak czy owak czas letni jest aktywny
Jeśli więc wrócimy do przykładu i spróbujemy go przeczytać, zobaczymy, że 27 grudnia 2005 r. jest godzina 8:36:20, czyli 2 dni po niedzieli (wtorek) i minęło 360 dni od początku rok. Czas letni nie jest aktywny.
Uczynienie Perl Localtime czytelnym
Kilka elementów tablicy zwracanych przez czas lokalny jest nieco niewygodnych do odczytania. Kto by pomyślał o bieżącym roku w kategoriach liczby lat po 1900 roku? Rzućmy okiem na przykład, który sprawia, że nasza data i godzina są bardziej przejrzyste.
|_+_||_+_||_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
Po uruchomieniu programu powinieneś zobaczyć o wiele bardziej czytelną datę i godzinę, jak poniżej:
|_+_||_+_|
Co więc zrobiliśmy, aby stworzyć tę bardziej czytelną wersję? Najpierw przygotowujemy dwie tablice z nazwami miesięcy i dni tygodnia.
|_+_||_+_||_+_|
Ponieważ funkcja czasu lokalnego zwraca te elementy w wartościach odpowiednio od 0-11 i 0-6, są one idealnymi kandydatami na tablicę. Wartość zwrócona przez czas lokalny może być użyta jako adres numeryczny, aby uzyskać dostęp do właściwego elementu w tablicy.
|_+_||_+_|
|_+_|
Następnym krokiem jest pobranie wszystkich wartości z funkcji czasu lokalnego. W tym przykładzie używamy skrótu Perla, aby automatycznie umieścić każdy element tablicy localtime we własnej zmiennej. Wybraliśmy nazwy tak, aby łatwo było zapamiętać, który element jest którym.
|_+_||_+_||_+_|
Musimy również dostosować wartość roku. Pamiętaj, że czas lokalny zwraca liczbę lat od 1900, więc aby znaleźć bieżący rok, musimy dodać 1900 do podanej wartości.
|_+_||_+_|
Jak sprawdzić aktualny czas GM w Perlu?
Załóżmy, że chcesz uniknąć wszelkich możliwych pomyłek w strefach czasowych i samodzielnie przejąć kontrolę nad przesunięciem. Pobranie aktualnego czasu w czasie lokalnym zawsze zwróci wartość opartą na ustawieniach strefy czasowej maszyny — serwer w USA zwróci jeden raz, podczas gdy serwer w Australii zwróci jeden prawie cały dzień inny ze względu na różnice w strefach czasowych.
Perl ma drugą przydatną funkcję określania czasu, która działa dokładnie tak samo jak czas lokalny, ale zamiast zwracać czas ustalony dla twojego komputera strefa czasowa , wraca Skoordynowany czas uniwersalny (w skrócie UTC, zwany także Greenwich Mean Time lub GMT). Po prostu funkcja nazywa się czas gm.
|_+_||_+_|
|_+_|
|_+_|
Poza faktem, że zwrócony czas będzie taki sam na każdym komputerze iw GMT, nie ma różnicy między funkcjami gmtime i localtime. Wszystkie dane i konwersje są wykonywane w ten sam sposób.
|_+_||_+_||_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
- localtime zwróci aktualny czas lokalny na komputerze, na którym działa skrypt.
- gmtime zwróci uniwersalny czas uniwersalny Greenwich lub GMT (lub UTC).
- Zwracane wartości mogą nie odpowiadać oczekiwaniom, więc upewnij się, że przekonwertujesz je w razie potrzeby.