Converts a time as returned by the time function to a 9-element list with the time analyzed for the local time zone. If EXPR is omitted, localtime uses the current time (as returned by time).
Typically used as follows:
# 0 1 2 3 4 5 6 7 8
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
localtime(time);
All list elements are numeric and come straight out of the C struct tm. $sec, $min, and $hour are the seconds, minutes, and hours of the specified time.
$mday is the day of the month in the range 1..31 (i.e. 1-based). $mon is the month in the range 0..11 (i.e. 0-based), with 0 indicating January and 11 indicating December. This makes it easy to get a month name from a list:
my @abbr = qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec);
print "$abbr[$mon] $mday";
# $mon=9, $mday=18 gives "Oct 18"
$year contains the number of years since 1900 (e.g. 129 for 2029).
$wday is the day of the week, with 0 indicating Sunday and 3 indicating Wednesday. $yday is the day of the year, in the range 0..364 (or 0..365 in leap years.)
$isdst is true if the specified time occurs when Daylight Saving Time is in effect, false otherwise.
To get a human-readable date/time string, use "strftime" in POSIX:
use POSIX qw(strftime);
my @now = localtime;
my $now_string = strftime "%Y-%m-%d %H:%M:%S", @now;
# e.g. "2025-11-29 15:19:02"
To get just the year, you can use either "strftime" in POSIX:
use POSIX qw(strftime);
# full year:
my $year = strftime "%Y", localtime;
# just the last two digits of the year:
my $ar = strftime "%y", localtime;
... or manual arithmetic:
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
localtime;
# full year:
$year += 1900;
# just the last two digits of the year:
my $ar = sprintf("%02d", $year % 100);
In scalar context, localtime returns the ctime(3) value:
my $now_string = localtime; # e.g., "Thu Oct 13 04:54:34 1994"
This scalar value is always in English, and is not locale-dependent. To get similar but locale-dependent date strings, try for example:
use POSIX qw(strftime);
my $now_string = strftime "%a %b %e %H:%M:%S %Y", localtime;
# or for GMT formatted appropriately for your locale:
my $now_string = strftime "%a %b %e %H:%M:%S %Y", gmtime;
$now_string will be formatted according to the current LC_TIME locale the program or thread is running in. See perllocale for how to set up and change that locale. Note that %a and %b, the short forms of the day of the week and the month of the year, may not necessarily be three characters wide.
The Time::gmtime and Time::localtime modules provide a convenient, by-name access mechanism to the gmtime and localtime functions, respectively.
For a comprehensive date and time representation look at the DateTime module on CPAN.
For GMT instead of local time use the gmtime builtin.
See also the Time::Local module (for converting seconds, minutes, hours, and such back to the integer value returned by time), and the POSIX module's mktime function.
Portability issues: "localtime" in perlport.