You are viewing the version of this documentation from Perl blead. This is a development version of Perl.
localtime EXPR
localtime

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.