home | O'Reilly's CD bookshelfs | FreeBSD | Linux | Cisco | Cisco Exam

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

### See Also

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

 3.2. Converting DMYHMS to Epoch Seconds 3.4. Adding to or Subtracting from a Date

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