## With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

No credit card required

# Finding Today’s Date

## Problem

You need to find the year, month, and day values for today’s date.

## Solution

Use `localtime`, which returns values for the current date and time if given no arguments. You can either use `localtime` and extract the information you want from the list it returns:

`(\$DAY, \$MONTH, \$YEAR) = (localtime)[3,4,5];`

Or, use Time::localtime, which overrides `localtime` to return a Time::tm object:

```use Time::localtime;
\$tm = localtime;
(\$DAY, \$MONTH, \$YEAR) = (\$tm->mday, \$tm->mon, \$tm->year);```

## Discussion

Here’s how you’d print the current date as “YYYY-MM-DD,” using the non-overridden `localtime`:

```(\$day, \$month, \$year) = (localtime)[3,4,5];
printf("The current date is %04d %02d %02d\n", \$year+1900, \$month+1, \$day);

`The current date is 1998 04 28````

To extract the fields we want from the list returned by `localtime`, we take a list slice. We could also have written it as:

`(\$day, \$month, \$year) = (localtime)[3..5];`

This is how we’d print the current date as “YYYY-MM-DD” (in approved ISO 8601 fashion), using Time::localtime:

```use Time::localtime;
\$tm = localtime;
printf("The current date is %04d-%02d-%02d\n", \$tm->year+1900,
(\$tm->mon)+1, \$tm->mday);

`The current date is 1998-04-28````

The object interface might look out of place in a short program. However, when you do a lot of work with the distinct values, accessing them by name makes code much easier to understand.

A more obfuscated way that does not involve introducing temporary variables is:

`printf("The current date is %04d-%02d-%02d\n", sub {(\$_[5]+1900, ...`

## With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

No credit card required