Czas lokalny: jak określić aktualny czas w Perl

Zegary z kukułką z różnymi strefami czasowymi

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.

|_+_||_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
  1. localtime zwróci aktualny czas lokalny na komputerze, na którym działa skrypt.
  2. gmtime zwróci uniwersalny czas uniwersalny Greenwich lub GMT (lub UTC).
  3. Zwracane wartości mogą nie odpowiadać oczekiwaniom, więc upewnij się, że przekonwertujesz je w razie potrzeby.