Полезная информация

## 3.3. Converting Epoch Seconds to DMYHMS

### Problem

You have a date and time in Epoch seconds, and you want to calculate individual DMYHMS values from it.

### Solution

Use the localtime or gmtime functions, depending on whether you want the date and time in GMT or your local time zone.

(\$seconds, \$minutes, \$hours, \$day_of_month, \$month, \$year,
\$wday, \$yday, \$isdst) = localtime(\$time);

The standard Time::timelocal and Time::gmtime modules override the localtime and gmtime functions to provide named access to the individual values.

use Time::localtime;        # or Time::gmtime
\$tm = localtime(\$TIME);     # or gmtime(\$TIME)
\$seconds = \$tm->sec;
# ...

### Discussion

The localtime and gmtime functions return strange year and month values; the year has 1900 subtracted from it, and 0 is the month value for January. Be sure to correct the base values for year and month, as this example does:

(\$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, \$month+1,
\$day_of_month);

We could have used the Time::localtime module to avoid the temporary variables:

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);