localtime EXPR
localtime

将由 time 函数返回的时间转换为一个包含 9 个元素的列表,其中时间已针对本地时区进行分析。通常用法如下

#     0    1    2     3     4    5     6     7     8
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
                                            localtime(time);

所有列表元素都是数字,直接来自 C 的 `struct tm`。$sec$min$hour 分别是指定时间的秒、分钟和小时。

$mday 是月份中的日期,$mon 是月份,范围为 0..11,其中 0 表示一月,11 表示十二月。这使得从列表中获取月份名称变得容易

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 包含自 1900 年以来的年数。要获取完整的年份,请编写

$year += 1900;

要获取年份的后两位数字(例如,2001 年的“01”),请执行

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

$wday 是星期几,其中 0 表示星期日,3 表示星期三。$yday 是年中的日期,范围为 0..364(或闰年的 0..365)。

$isdst 如果指定时间发生在夏令时生效时,则为真,否则为假。

如果省略 EXPR,localtime 将使用当前时间(由 time 返回)。

在标量上下文中,localtime 返回 ctime(3)

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

此标量值始终为英文,且依赖于区域设置。要获取类似但依赖于区域设置的日期字符串,请尝试以下方法

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;

C$now_string> 将根据程序或线程运行的当前 LC_TIME 区域设置进行格式化。有关如何设置和更改该区域设置,请参阅 perllocale。请注意,%a%b(星期几和月份的简写形式)不一定正好是三个字符宽。

Time::gmtimeTime::localtime 模块分别为 gmtimelocaltime 函数提供了方便的按名称访问机制。

有关全面的日期和时间表示,请查看 CPAN 上的 DateTime 模块。

要使用 GMT 而不是本地时间,请使用 gmtime 内置函数。

另请参阅 Time::Local 模块(用于将秒、分钟、小时等转换回 time 返回的整数值),以及 POSIX 模块的 mktime 函数。

可移植性问题:"perlport 中的 localtime"