【问题标题】:Perl Syntax helpPerl 语法帮助
【发布时间】:2016-10-18 01:51:08
【问题描述】:

我是 perl 的新手,谁能在下面的命令中解释我以了解使用 $t[1]-- 和 timelocal(1,1,1,reverse @t) 的目的。

以下命令用于将时间戳转换为纪元格式。但请解释我如何使用这个命令 $t[1]-- 和 timelocal(1,1,1,reverse @t)。

perl -MTime::Local=timelocal -e '@t = split(/[-\/]/, $ARGV[0]); $t[1]--; print timelocal(1,1,1,reverse @t);' $date

【问题讨论】:

  • 命令的输出是什么。你能运行它吗?

标签: perl


【解决方案1】:

按顺序举例:

perl -MTime::Local=timelocal -e '
    @t = split(/[-\/]/, $ARGV[0]);
    $t[1]--;
    print timelocal(1,1,1,reverse @t);
' "2016-10-18"

将打印一个纪元日期(自 1970 年 1 月 1 日以来的秒数)

1476766861

查看文档:perldoc Time::Local 我们看到:

值得特别注意所提供值的预期范围。月份中某天的值是实际日期(即 1..31), 而月份是自一月以来的月数(0..11)。这是 与 localtime() 和 gmtime() 返回的值一致。

第一个语句将字符串2016-10-18 用破折号和斜线分割成数组@t = (2016, 10, 18)。 Perl 数组默认是从 0 开始的,所以$t[1] 表示第二项,即月份,这里设置为10。由于localtime(0-11) 范围内需要几个月,我们需要减去1,将$t[1] 设置为9。最后一条语句只是将日期部分转换回纪元时间,反转 @t 以匹配 timelocal 的参数顺序:

 #       timelocal( $sec, $min, $hour, $mday, $mon, $year )
 $time = timelocal(     1,    1,    1,    18,    9,  2016 ); # time in seconds = 1476766861

【讨论】:

  • 非常感谢您的精彩解释。它对我的理解有很大帮助。再次感谢您的帮助
【解决方案2】:

它从第一个组件中减去 1。 @t 数组的。 我这是月份字段。 注意:第一个 [1],而不是第零个 [0]。

http://www.perlmonks.org/?node_id=665996

问候,

弗恩。

【讨论】:

    猜你喜欢
    • 2021-06-10
    • 2016-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多