Converting Epoch Seconds to DMYHMS (Perl Cookbook, 2nd Edition)

## 3.3. Converting Epoch Seconds to DMYHMS

### 3.3.1. Problem

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

### 3.3.2. Solution

Use the `localtime` or `gmtime` functions, depending on whether you want the date and time in UTC 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;
>     # ...

### 3.3.3. 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);

### 3.3.4. See Also

The `localtime` function in perlfunc(1) and Chapter 29 of Programming Perl; the documentation for the standard Time::localtime and Time::gmtime modules; convert in the other direction using Recipe 3.2

Copyright © 2003 O'Reilly & Associates. All rights reserved.