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/localtimeto 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".