将由 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::gmtime 和 Time::localtime 模块分别为 gmtime
和 localtime
函数提供了方便的按名称访问机制。
有关全面的日期和时间表示,请查看 CPAN 上的 DateTime 模块。
要使用 GMT 而不是本地时间,请使用 gmtime
内置函数。
另请参阅 Time::Local
模块(用于将秒、分钟、小时等转换回 time
返回的整数值),以及 POSIX 模块的 mktime
函数。
可移植性问题:"perlport 中的 localtime"。