Преобразование секунд с начала эпохи в полное время
Проблема
Требуется преобразовать количество секунд с начала эпохи в отдельные значения дня, месяца, года и т. д.
Решение
Воспользуйтесь функцией
localtime или
gmtime
в зависимости от того, хотите ли вы получить дату/время для
текущего часового пояса или для Гринвичского меридиана.
($seconds, $minutes, $hours, $day_of_month, $year,
$wday, $yday, $isdst) = localtime($time);
Стандартные модули Time::timelocal и Time::gmtime переопределяют функции localtime и gmtime так, чтобы к
компонентам можно было обращаться по именам:
use Time::localtime; # или Time::gmtime
$tm = localtime($TIME); # или gmtime($TIME)
$seconds = $tm->sec;
# ...
Комментарий
Функции localtime и
gettime
возвращают несколько странную информацию о годе и месяце; из
года вычитается 1900, а нумерация месяцев начинается с 0 (январь). Не забудьте исправить полученные
величины, как это делается в следующем примере:
{$seconds, $minutes, $hours, $day_of_month, $month, $year,
$wday, $yday, $isdst) = localtime($time);
printf( "Dateline: %02d:%02d:%02d-%04d/%02d/%02d\n",
$hours, $minutes, $seconds, $year+1900, $montn+1,
$day_of_month);
Модуль Time::localtime позволяет избавиться от временных переменных:
use Time::localtime;
$tm = localtime($time);
printf("Dateline: %02d:%02d:%02d-%04d/%02d/%02d\n",
$tm->hour, $tm->min, $tm->sec, $tm->year+1900,
$tm->mon+1, $tm->mday);
См. такжеОписание функции localtime
Proverte kod v komentariyah gde pro list tam oshibki detskie
Оставить комментарий:
|
|