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.