Perl中的日期格式问题
我有以下代码:Perl中的日期格式问题,perl,Perl,我有以下代码: $epoc = $rs->{'lastlogin'}; $date = localtime($epoc); lastlogin是Unix时间戳 输出如下:2016年7月5日星期二13:46:43 我在找2016年7月5日星期二13:46:43。如您所见,年份移动到左一位置 我也是一个新手,所以我尝试了以下几项匹配:,但我无法从Unix时间戳中找到日期格式的匹配项。函数POSIX::strftime是您的朋友。第一个参数是格式字符串,对于其余参数,可以使用l
$epoc = $rs->{'lastlogin'};
$date = localtime($epoc);
lastlogin
是Unix时间戳
输出如下:2016年7月5日星期二13:46:43
我在找2016年7月5日星期二13:46:43
。如您所见,年份移动到左一位置
我也是一个新手,所以我尝试了以下几项匹配:,但我无法从Unix时间戳中找到日期格式的匹配项。函数
POSIX::strftime
是您的朋友。第一个参数是格式字符串,对于其余参数,可以使用localtime()
(或gmtime()
)的结果,即$year
,$month
…。格式字符串看起来有点类似于printf
的格式字符串,但允许使用一些特殊字符。例如,它们被解释了
#!/usr/bin/env perl
use strict;
use warnings;
use POSIX qw(strftime);
my $epoc = 1467743128;
print POSIX::strftime( '%a %b %e %Y %H:%M:%S', localtime($epoc) ), "\n";
输出:
Di Jul 5 2016 20:25:28
(“Di”是“Dienstag”的缩写,在英语中是“星期二”。)
strftime
函数及其参数也在本文中进行了解释。只需向下滚动并查看那里
您可能会对
localtime
的行为感到困惑。当你写作时
my $date = localtime($epoc);
然后在标量上下文中计算localtime
。例如,localtime
注意到您将其返回值分配给标量(一个简单变量,而不是列表)。在这种情况下,它返回一个类似于日期和时间戳的可打印字符串。但是当在列表上下文中使用localtime
时,它会返回一个元组(列表),其中包含($sec、$min、$hour、$mday、$mon、$year、$wday、$yday、$isdst)
在POSIX::strftime('%a%b%e%Y%H:%M:%S',localtime($epoc))
localtime
是在列表上下文中计算的,这正是strftime
所期望的:格式字符串和列表
my $date = localtime($epoc); # scalar context
print POSIX::strftime( '%a %b %e %Y %H:%M:%S', $date ), "\n"; # doesn't work
my @date = localtime($epoc); # list context (notice the "@")
print POSIX::strftime( '%a %b %e %Y %H:%M:%S', @date ), "\n"; # works
内核重载内置的localtime
函数,以便返回带有strftime
方法的对象,从而允许您根据需要格式化结果
(localtime
继续以相同的方式执行所有其他操作,因此不会丢失任何功能。)
使用严格;
使用“全部”警告;
使用时间::件;
我的$rs={lastlogin=>1467726403};
my$epoc=$rs->{lastlogin};
my$date=localtime($epoc)->strftime(“%a%b%d%Y%H:%M:%S”);
打印$date,“\n”;
输出
2016年7月5日星期二14:46:43
要将时间更改为12小时,您需要为小时使用
%I
格式说明符,而不是%H
,并在末尾添加%p
,以提供AM
或PM
:
my$date=localtime($epoc)->strftime(“%a%b%d%Y%I:%M:%S%P”);
输出
2016年7月5日星期二下午02:46:43
您是否尝试过$date=strftime”%a%b%e%Y%H:%M:%S“,$localtime($epoc)代码>?