When writing Perl scripts I frequently find the need to obtain the current time represented as a string formatted as YYYY-mm-dd HH:MM:SS
(say 2009-11-29 14:28:29
).
In doing this I find myself taking this quite cumbersome path:
man perlfunc
/localtime
to search for localtime - repeat five times (/
+\n
) to reach the relevant section of the manpage- Copy the string
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
from the manpage to my script. - Try with
my $now = sprintf("%04d-%02d-%02d %02d:%02d:%02d", $year, $mon, $mday, $hour, $min, $sec);
- Remember gotcha #1: Must add 1900 to $year to get current year.
- Try with
my $now = sprintf("%04d-%02d-%02d %02d:%02d:%02d", $year+1900, $mon, $mday, $hour, $min, $sec);
- Remember gotcha #2: Must add 1 to $mon to get current month.
- Try with
my $now = sprintf("%04d-%02d-%02d %02d:%02d:%02d", $year+1900, $mon+1, $mday, $hour, $min, $sec);
- Seems ok. Done!
While the process outlined above works it is far from optimal. I'm sure there is a smarter way, so my question is simply:
What is the easiest way to obtain a YYYY-mm-dd HH:MM:SS
of the current date/time in Perl?
Where "easy" encompasses both "easy-to-write" and "easy-to-remember".