You need to find the year, month, and day values for today's date.
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);
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, $_[4]+1, $_[3])}->(localtime));
There is also
strftime
from the POSIX module discussed in
Recipe 3.8
:
use POSIX qw(strftime); print strftime "%Y-%m-%d\n", localtime;
The
gmtime
function works just as
localtime
does, but gives the answer in GMT instead of your local time zone.
The
localtime
and
gmtime
functions in
perlfunc
(1) and
Chapter 3
of
Programming Perl
; the documentation for the standard Time::localtime module
Copyright © 2001 O'Reilly & Associates. All rights reserved.