Perl 5 version 8.6 documentation


  • localtime EXPR

    Converts a time as returned by the time function to a 9-element list with the time analyzed for the local time zone. Typically used as follows:

    1. # 0 1 2 3 4 5 6 7 8
    2. ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
    3. 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, and $mon is the month itself, in the range 0..11 with 0 indicating January and 11 indicating December. $year is the number of years since 1900. That is, $year is 123 in year 2023. $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 during daylight savings time, false otherwise.

    Note that the $year element is not simply the last two digits of the year. If you assume it is, then you create non-Y2K-compliant programs--and you wouldn't want to do that, would you?

    The proper way to get a complete 4-digit year is simply:

    1. $year += 1900;

    And to get the last two digits of the year (e.g., '01' in 2001) do:

    1. $year = sprintf("%02d", $year % 100);

    If EXPR is omitted, localtime() uses the current time (localtime(time)).

    In scalar context, localtime() returns the ctime(3) value:

    1. $now_string = localtime; # e.g., "Thu Oct 13 04:54:34 1994"

    This scalar value is not locale dependent but is a Perl builtin. For GMT instead of local time use the gmtime builtin. See also the Time::Local module (to convert the second, minutes, hours, ... back to the integer value returned by time()), and the POSIX module's strftime(3) and mktime(3) functions.

    To get somewhat similar but locale dependent date strings, set up your locale environment variables appropriately (please see perllocale) and try for example:

    1. use POSIX qw(strftime);
    2. $now_string = strftime "%a %b %e %H:%M:%S %Y", localtime;
    3. # or for GMT formatted appropriately for your locale:
    4. $now_string = strftime "%a %b %e %H:%M:%S %Y", gmtime;

    Note that the %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.