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

click fraud protection

Perl ma 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 obecnie ustawiony na komputerze, na którym działa skrypt. Na przykład, jeśli uruchamiasz skrypt Perla na komputerze lokalnym, czas lokalny zwróci bieżący czas, który ustawiłeś i przypuszczalnie ustawiony na bieżącą strefę czasową.

Po uruchomieniu tego samego skryptu na serwerze WWW może się okazać, że czas lokalny jest wyłączony z czasu lokalnego w systemie komputerowym. Serwer może znajdować się w innej strefie czasowej lub być ustawiony nieprawidłowo. Każda maszyna może mieć zupełnie inne wyobrażenie o tym, co to jest czas lokalny i może zająć trochę regulacji, zarówno w skrypcie, jak i na samym serwerze, aby dopasować go do oczekiwań.

Funkcja czasu lokalnego zwraca listę pełną danych o bieżącym czasie, z których niektóre będą musiały zostać dostosowane. Uruchom poniższy program, a zobaczysz każdy element na liście wydrukowany w wierszu i oddzielony spacjami.

instagram viewer
#! / 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 bieżącego czasu są w kolejności:

  • Sekund po minucie
  • Minuty po godzinie
  • Godziny po północy
  • Dzień miesiąca
  • Kilka miesięcy po początku roku
  • Liczba lat od 1900 r
  • Liczba dni od początku tygodnia (niedziela)
  • Liczba dni od początku roku
  • Tak czy owak oszczędności w ciągu dnia jest aktywny

Jeśli więc wrócimy do przykładu i spróbujemy go przeczytać, przekonasz się, że 27 grudnia 2005 jest godzina 8:36:20, 2 dni po niedzieli (wtorek) i 360 dni od rozpoczęcia rok. Czas letni nie jest aktywny.

Uczynienie Perl Localtime Readable

Kilka elementów tablicy zwracanych przez czas lokalny jest nieco trudnych do odczytania. Kto by pomyślał o bieżącym roku pod względem liczby lat po 1900 roku? Rzućmy okiem na przykład, który wyjaśnia naszą datę i godzinę.

 #! / usr / local / bin / perl

 @months = qw (styczeń lut mar kwi maj cze lip sierpień wrz paź lis gru);

 @weekDays = qw (niedz. wt. śr. czw. pt. niedz.);

 ($ sekunda, $ minuta, $ godzina, $ dayOfMonth, $ miesiąc, $ yearOffset, $ dayOfWeek, $ dayOfYear, $ daylightSavings) = czas lokalny ();

 $ rok = 1900 + $ rok Offset;

 $ theTime = "$ godzina: $ minuta: $ sekunda, $ weekDays [$ dayOfWeek] $ miesięcy [$ miesiąc] $ dayOfMonth, $ rok";

 print $ theTime; 

Po uruchomieniu programu powinna być widoczna o wiele bardziej czytelna data i godzina:

 9:14:42, śr. 28 grudnia 2005 

Co więc zrobiliśmy, aby stworzyć tę bardziej czytelną wersję? Najpierw przygotowujemy dwie tablice z nazwami miesięcy i dni tygodnia.

 @months = qw (styczeń lut mar kwi maj cze lip sierpień wrz paź lis gru);

 @weekDays = qw (niedz. wt. śr. czw. pt. niedz.); 

Ponieważ funkcja czasu lokalnego zwraca te elementy w wartościach odpowiednio od 0-11 i 0-6, są idealnymi kandydatami na tablicę. Wartość zwrócona przez czas lokalny może być wykorzystana jako adres numeryczny w celu uzyskania dostępu do poprawnego elementu w tablicy.

 $ miesięcy [$ miesiąc] $ tydzień Dni [$ dayOfWeek]


Następnym krokiem jest uzyskanie wszystkich wartości z funkcji czasu lokalnego. W tym przykładzie używamy skrótu Perl do automatycznego umieszczania każdego elementu w tablicy czasu lokalnego we własnej zmiennej. Wybraliśmy nazwy, aby łatwo było zapamiętać, który element jest który.

 ($ sekunda, $ minuta, $ godzina, $ dayOfMonth, $ miesiąc, $ yearOffset, $ dayOfWeek, $ dayOfYear, $ daylightSavings) = czas lokalny ();


Musimy również dostosować wartość roku. Pamiętaj, że czas lokalny zwraca liczbę lat od 1900 roku, więc aby znaleźć bieżący rok, musimy dodać 1900 do podanej wartości.

 $ rok = 1900 + $ rok Offset;

Jak określić aktualny czas GM w Perlu

Powiedzmy, że chcesz uniknąć wszelkich możliwych pomyłek w strefie czasowej i sam przejąć kontrolę nad przesunięciem. Uzyskiwanie aktualnego czasu w czasie lokalnym zawsze zwraca wartość opartą na ustawieniach strefy czasowej urządzenia - serwer w USA zwrócą jeden raz, a serwer w Australii zwróci jeden prawie cały dzień inny ze względu na strefę czasową różnice.

Perl ma drugą przydatną funkcję informującą o czasie, która działa dokładnie tak samo jak czas lokalny, ale zamiast zwracać czas ustalony dla twojego komputera strefa czasowa, zwraca Skoordynowany czas uniwersalny (w skrócie UTC, zwany także czasem uniwersalnym Greenwich lub GMT). Wystarczy wywołać tę funkcję gmtime.

 #! / usr / local / bin / perl

 @timeData = gmtime (czas);

 print join ('', @timeData); 

Poza tym, że zwracany czas będzie taki sam na każdej maszynie, a w GMT nie ma różnicy między funkcjami gmtime i localtime. Wszystkie dane i konwersje są wykonywane w ten sam sposób.

 #! / usr / local / bin / perl

 @months = qw (styczeń lut mar kwi maj cze lip sierpień wrz paź lis gru);

 @weekDays = qw (niedz. wt. śr. czw. pt. niedz.);

 ($ sekunda, $ minuta, $ godzina, $ dayOfMonth, $ miesiąc, $ yearOffset, $ dayOfWeek, $ dayOfYear, $ daylightSavings) = gmtime ();

 $ rok = 1900 + $ rok Offset;

 $ theGMTime = "$ godzina: $ minuta: $ sekunda, $ weekDays [$ dayOfWeek] $ miesięcy [$ miesiąc] $ dayOfMonth, $ rok";

 wypisz $ theGMTime; 

  1. czas lokalny zwróci bieżący 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 być zgodne z oczekiwaniami, dlatego należy je przekonwertować w razie potrzeby.
instagram story viewer