nimdokk has asked for the wisdom of the Perl Monks concerning the following question:

Dear Monks,

I am attempting to set some variables to the current date, month, year using the localtime(). I'm able to get the date and month, but I need to use 2-digit date/month (ie. 03/01/2003 instead of 3/1/2003 for 1 January 2003). I have a possibility in mind to set up an if-then statement to check for date/month 1-9 and append a 0 to the front, but this strikes me as extra work. Could someone point me in the direction of a FAQ or tutorial that could help me resolve this dilemma. Variables set as follows:

my $year=localtime->year()+1900; my $month=localtime->mon()+1; my $date=localtime->mday();

Thanks

Replies are listed 'Best First'.
Re: Getting 2-digit dates from localtime()
by Juerd (Abbot) on Jan 03, 2003 at 20:16 UTC

    but I need to use 2-digit date/month (ie. 03/01/2003 ...)

    use POSIX; my $date = strftime "%m/%d/%Y", localtime;

    - Yes, I reinvent wheels.
    - Spam: Visit eurotraQ.
    

Re: Getting 2-digit dates from localtime()
by MarkM (Curate) on Jan 03, 2003 at 20:12 UTC

    The most common solution to this problem (leading '0' for numbers) is to use sprintf:

    $string = sprintf("%02d/%02d/%d", $year, $month, $mday);

    See the perlfunc manpage (or 'perldoc -f sprintf') for more information on sprintf.

    I would be tempted to continue the 'mday' naming convention over 'date' as 'date' usually signifies the entire data structure that represents the date. 'wday' and 'mday' signify only a component of the 'date'.

Re: Getting 2-digit dates from localtime()
by waswas-fng (Curate) on Jan 03, 2003 at 20:10 UTC
    format the string with sprintf edited: $datestring = sprintf("%02d/%02d/%d",$mth,$day,$year);

    -Waswas