如何在Perl中将dd/mm/yyyy转换为epoch时间?

3

我已经搜寻了几个小时,想找一个将dd/mm/yyyy格式转换为Epoch时间的公式,但未能找到解决方案。

我现在有两个日期,分别以不同的格式表示,如下所示:“08011985”和“09302014”。我必须将它们转换为Epoch时间,以获取最早日期和最晚日期之间的差异,并根据范围的大小执行某些操作。

我无法安装任何模块,并且使用的是5.8.8版本。


5
似乎无法安装模块有许多解决方法。也许你应该发布一个问题,看看能否得到好的答案。这样,使用Perl的生活将会更加愉快。 - Schwern
我原以为“如何在Perl中将dd/mm/yyyy转换为时期时间?”很简洁?我已经花费了几个小时,复制示例等等,但没有成功! - dbonneville
2
我建议你着手解决那个“我无法安装任何模块”的问题。 - Schwern
如果情况像我的一样,那么这是一个政策问题,而不是技术问题 :) - Nick P
4
我们也有针对那些问题的解决方案。 - Schwern
2个回答

5
内置模块Time::Local提供了localtime和gmtime的反函数timelocal和timegm。它们接受日期和时间并返回纪元时间。 perlfaq4涵盖了这些类型的问题。

我刚刚从perlfaq4尝试了这个:`$time = timelocal( $sec, $min, $hour, $mday, $mon, $year );print "time = " . $time . "\n";`...然后我得到了这个错误"Day '' out of range 1..31",并且还有我的脚本中代码所在的行号。 - dbonneville
请注意,对于1月到12月,月份从“0”到“11”进行计数。这可能是您遇到的问题。 - Chris Charley
2
@dbonneville,你是否实际提供了一个有效的$mday值?评论不是提出新问题的适当场所。 - ikegami
@ikegami,我的$mday值为0,但至少需要为1。这个问题现在已经解决了。谢谢! - dbonneville

0
这是一个使用 Time::Local 模块的示例,该模块一直是 Perl 5 的核心组件。
use strict;
use warnings;

use Time::Local qw/ timelocal /;

for my $date ( qw/ 08011985 09302014 / ) {
  print epoch_for_mmddyyyy($date), "\n";
}

sub epoch_for_mmddyyyy {
  my ($m, $d, $y) = unpack 'A2A2A4', shift;
  timelocal(0, 0, 0, $d, $m-1, $y);
}

输出

491698800
1412031600

既然您选择了我的答案作为解决方案,我已经修改它以在子程序中提供您所需的功能。 - Borodin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接