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)