【问题标题】:How to use both Time::Local and Time::localtime together in perl如何在 perl 中同时使用 Time::Local 和 Time::localtime
【发布时间】:2018-12-31 03:31:46
【问题描述】:

我的 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)

【问题讨论】:

  • 您运行的是哪个版本的 Perl?运行perl -v 并告诉我们。通常 Perl 保存模块的目录不止一个。检查您是否安装了某些东西(以及什么版本)的最佳方法是运行perl -MTime::Piece\ 999(带有反斜杠\ 和一个空格)。它会告诉你你有什么版本,或者说你没有。
  • 另外,请告诉我们您实际上想要做什么。为什么要一起使用它们?你想达到什么目标?
  • 我使用的是5.8.2版本。
  • 我一起使用的原因是我没有任何新的时间模块(或)日期模块,我想使用 Time::Piece 但不能因为我没有有它。我正在尝试将字符串转换为时间(我也没有 POSIX::qw )。所以最后没有其他选项了,我必须使用 timelocal 函数来满足我的需要(Time::Local),我还需要 tm 结构将格式化的输出打印到文件中(Time::Local)。我需要本地时间才能获得所需的函数时间。我正在放置开始和结束,然后计算时间。
  • 没有 POSIX::qw。如果您执行use POSIX qw(foo bar),则意味着它会从 POSIX 模块导入函数 foobar。在 Perl 5.8.2 中包含 POSIX。见here

标签: perl scripting


【解决方案1】:

当您尝试了解 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 在他的评论中所说,这似乎是一件很奇怪的事情,如果你解释了你想要实现的目标,我们几乎可以肯定会向你展示一个更好的方法。

【讨论】:

  • 正如之前的评论中提到的,我一起使用的原因是我没有任何新的时间模块(或)日期模块,我想使用 Time::Piece 但是不能,因为我没有。我正在尝试将字符串转换为时间(我也没有 POSIX::qw )。所以最后没有其他选项了,我必须使用 timelocal 函数来满足我的需要(Time::Local),我还需要 tm 结构来将格式化的输出打印到文件中(Time::Local)。我需要本地时间才能获得所需的函数时间。我正在放置开始和结束,然后计算时间。
  • 如果您没有 POSIX,那么您的 Perl 安装从根本上就被破坏了,您应该拒绝使用它,直到它被修复!
  • 我会通知相关人员,我也无权升级,谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-10
  • 1970-01-01
  • 2014-08-29
  • 1970-01-01
  • 2010-11-11
  • 1970-01-01
相关资源
最近更新 更多