代码之家  ›  专栏  ›  技术社区  ›  Naren

如何在Perl中同时使用time::local和time::localtime

  •  -2
  • Naren  · 技术社区  · 6 年前

    我的Perl安装中没有任何高级日期或时间实用程序。我只有 Time::Local , Time::gmtime , Time::localtime Time::tm .

    use Time::Local;
    #use Time::localtime;
    
    #$datestring = localtime('2018/07/17-21:18:15','%Y/%m/%d-%H:%M:%S');
    
    my $str = '2018/07/17-21:18:15';
    
    my ($date, $time) = split /-/, $str;
    my ($year, $mon, $day) = split /\//, $date;
    my ($hour, $min, $sec) = split /:/, $time;
    --$mon;
    
    my $time  = timelocal($sec, $min, $hour, $day, $mon, $year);
    my $time2 = localtime;
    my $time3 = localtime;
    
    print "time is $time, $time2, $time3\n";
    

    执行以上步骤后,我得到

    time is 1531880295, Mon Jul 23
    10:50:54 2018, Mon Jul 23 10:50:54 2018
    

    取消对第二行的注释后,我得到以下内容(使用'tm 结构)

    time is 1531880295, Time::tm=ARRAY(0x40036a40),
    Time::tm=ARRAY(0x40036ab8)
    

    我想同时使用这两种功能并像这样使用它们

    time is 1531880295, Mon Jul 23 10:50:54 2018,
    Time::tm=ARRAY(0x40036ab8)
    
    1 回复  |  直到 6 年前
        1
  •  3
  •   Dave Cross    6 年前

    当您试图了解Perl模块的工作原理时,阅读文档总是一个好主意。您正在使用的两个模块的文档位于 Time::Local Time::localtime . time::localtime的文档包括以下行:

    函数提供了一种获取原始core::localtime()函数的标量意义的方法。

    因此,您可以通过将代码更改为:

    my $time = timelocal($sec, $min, $hour, $day, $mon, $year);
    my $time2 = ctime;
    my $time3 = localtime;
    print "time is $time, $time2, $time3\n";
    

    但是,正如Simbabque在他的评论中所说的,这似乎是一件很奇怪的事情,如果你解释了你试图实现的目标,我们几乎可以肯定地向你展示一种更好的方法。