如何在Perl中一起使用Time :: Local和Time :: localtime

时间:2018-07-23 15:55:41

标签: perl scripting

我的Perl安装中没有任何高级日期或时间实用程序。我只有Time::LocalTime::gmtimeTime::localtimeTime::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 个答案:

答案 0 :(得分:3)

当您尝试确定Perl模块的工作方式时,阅读文档始终是一个好主意。您正在使用的两个模块的文档位于Time::LocalTime::localtime。 Time :: localtime的文档包括以下行:

  

ctime()函数提供了一种获取原始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在他的评论中所说,这似乎是一件很奇怪的事情,如果您解释了您要实现的目标,我们几乎可以肯定地向您展示了一种更好的方法。