Местно време: Как да кажете текущото време в Perl

Perl има удобна вградена функция за намиране на текущата дата и час във вашите скриптове. Въпреки това, когато говорим за намиране на време, говорим за времето, което в момента е зададено на машината, на която се изпълнява скриптът. Например, ако стартирате скрипта си Perl на вашата локална машина, localtime ще върне текущото време, което сте задали, и по презумпция, зададено на текущата ви часова зона.

Когато стартирате същия скрипт на уеб сървър, може да откриете, че локалното време там е изключено от localtime на вашата настолна система. Сървърът може да е в друга часова зона или да е настроен неправилно. Всяка машина може да има съвсем различна представа за това какво е локално време и може да отнеме някои корекции, или в рамките на скрипта, или на самия сървър, за да може той да съвпадне с това, което очаквате.

Функцията localtime връща списък, пълен с данни за текущото време, някои от които ще трябва да бъдат коригирани. Стартирайте програмата по-долу и ще видите всеки елемент от списъка, отпечатан на реда и разделен на интервали.

#! / ЮЕсАр / местни / хамбар / Perl
@timeData = localtime (време);
печат съединяване ('', @timeData);

Трябва да видите нещо подобно на това, въпреки че броят може да бъде много различен.

20 36 8 27 11 105 2 360 0

Тези елементи на текущото време са, за да:

  • Секунди миналата минута
  • Минути миналият час
  • Часове след полунощ
  • Ден на месеца
  • Месеци минали началото на годината
  • Брой години от 1900г
  • Брой дни от началото на седмицата (неделя)
  • Брой дни от началото на годината
  • Дали спестяване на дневна светлина е активен

Така че, ако се върнем към примера и се опитаме да го прочетем, ще видите, че е на 8:36:20 на 27 декември 2005 г., че е минало 2 дни в неделя (вторник), и това е 360 дни от началото на година. Летното часово време не е активно.

Да направим Perl Localtime четим

Някои от елементите в масива, който localtime връща, са малко неудобни за четене. Кой би помислил за текущата година по отношение на броя на миналите 1900 г.? Нека да разгледаме един пример, който прави датата и времето ни по-ясни.

 #! / ЮЕсАр / местни / хамбар / Perl

 @months = qw (януари февруари март април май юни юли август септември октомври ноември декември);

 @weekDays = qw (Sun Mon Tue Wed Thu Fri Sat Sun);

 ($ секунда, $ минута, $ час, $ dayOfMonth, $ месец, $ yearOffset, $ dayOfWeek, $ dayOfYear, $ daylightSavings) = localtime ();

 $ year = 1900 + $ yearOffset;

 $ theTime = "$ час: $ минута: $ секунда, $ седмицаДенни [$ денOfWeek] $ месеци [$ месец] $ денOfMonth, $ година";

 отпечатайте $ theTime; 

Когато стартирате програмата, трябва да видите много по-четена дата и час като този:

 9:14:42, сря 28 декември 2005 г. 

И така, какво направихме, за да създадем тази по-четена версия? Първо, подготвяме два масива с имената на месеците и дните от седмицата.

 @months = qw (януари февруари март април май юни юли август септември октомври ноември декември);

 @weekDays = qw (Sun Mon Tue Wed Thu Fri Sat Sun); 

Тъй като функцията localtime връща тези елементи в стойности, вариращи съответно от 0-11 и 0-6, те са перфектни кандидати за масив. Стойността, върната от localtime, може да се използва като числов адрес за достъп до правилния елемент в масива.

 $ месеци [$ месец] $ седмицаДневи [$ денOfWeek]


Следващата стъпка е да получите всички стойности от функцията localtime. В този пример използваме пряк път Perl, за да разположим автоматично всеки елемент от локалния масив в неговата собствена променлива. Избрахме имена, така че да е лесно да запомните кой елемент е кой.

 ($ секунда, $ минута, $ час, $ dayOfMonth, $ месец, $ yearOffset, $ dayOfWeek, $ dayOfYear, $ daylightSavings) = localtime ();


Ние също трябва да коригираме стойността на годината. Не забравяйте, че localtime връща броя на годините след 1900 г., така че за да намерим текущата година, ще трябва да добавим 1900 към стойността, която ни е дадена.

 $ year = 1900 + $ yearOffset;

Как да кажем текущото време на GM в Perl

Да кажем, че искате да избегнете всички възможни обърквания във часовата зона и сами да поемете контрола върху компенсирането. Получаването на текущото време в местно време винаги ще връща стойност, която се основава на настройките на часовата зона на машината - сървър в САЩ ще се върнат еднократно, докато сървърът в Австралия ще върне един почти цял ден различен поради часовата зона разлики.

Perl има втора удобна функция за разказване на време, която работи по абсолютно същия начин като localtime, но вместо да връща времето, фиксирано за вашата машина часова зона, тя се връща Координирано универсално време (съкратено като UTC, наричано също средно време на Гринуич или GMT). Просто е извикана функцията gmtime.

 #! / ЮЕсАр / местни / хамбар / Perl

 @timeData = gmtime (време);

 печат съединяване ('', @timeData); 

Освен факта, че върнатото време ще бъде едно и също на всяка машина и в GMT, няма разлика между функциите gmtime и localtime. Всички данни и преобразувания се извършват по един и същи начин.

 #! / ЮЕсАр / местни / хамбар / Perl

 @months = qw (януари февруари март април май юни юли август септември октомври ноември декември);

 @weekDays = qw (Sun Mon Tue Wed Thu Fri Sat Sun);

 ($ секунда, $ минута, $ час, $ dayOfMonth, $ месец, $ yearOffset, $ dayOfWeek, $ dayOfYear, $ daylightSavings) = gmtime ();

 $ year = 1900 + $ yearOffset;

 $ theGMTime = "$ час: $ минута: $ секунда, $ weekDays [$ dayOfWeek] $ months [$ month] $ dayOfMonth, $ year";

 отпечатайте $ theGMTime; 

  1. localtime ще върне текущото местно време на машината, която изпълнява скрипта.
  2. gmtime ще върне универсалното средно време на Гринуич или GMT (или UTC).
  3. Възвръщаемите стойности може да не са точно това, което очаквате, така че не забравяйте да ги преобразувате според нуждите.
TikTok viewer