【问题标题】:How to convert dd/mm/yyyy to epoch time in Perl?如何在 Perl 中将 dd/mm/yyyy 转换为纪元时间?
【发布时间】:2015-02-16 17:54:59
【问题描述】:

我已经搜索了几个小时以找到将 dd/mm/yyyy 格式转换为纪元时间的公式,但没有找到解决方案。

在从 2 种不同格式转换后,我有两个日期,现在就像“08011985”和“09302014”。我必须将它们转换为纪元时间以获得最早和最晚日期的差异,并根据价差的大小做一些事情。

我无法安装任何模块并且我在 5.8.8 上。

【问题讨论】:

  • 似乎无法安装模块的处理方法有很多。也许你应该把你的情况作为一个问题发布,看看你是否能得到一个好的答案。您使用 Perl 的生活会更加愉快。
  • 我想“如何在 Perl 中将 dd/mm/yyyy 转换为纪元时间?”简洁吗?我花了几个小时,复制示例等,但没有运气!
  • 我建议您研究解决“我无法安装任何模块”的问题。
  • @Schwern 如果跟我的情况类似,那是政策问题,而不是技术问题 :)
  • @NickP 我们也有解决方案。

标签: perl time perl-module epoch


【解决方案1】:

内置模块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”和我的脚本的代码所在的行号.
  • 请注意,从 1 月到 12 月的月份数从 011。这可能是您的问题。
  • @dbonneville,您是否确实为$mday 提供了有效值?评论不是提出新问题的合适场所。
  • @ikegami,当它需要至少为 1 时,我的 $mday 值是 0。这部分现在已经解决了。谢谢!
【解决方案2】:

这是一个使用 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

【讨论】:

  • 由于您选择了我的答案作为解决方案,因此我对其进行了修改以提供您在子例程中需要的功能。
猜你喜欢
  • 2018-11-08
  • 2016-06-09
  • 2019-01-16
  • 1970-01-01
  • 2011-10-22
  • 2011-03-18
  • 1970-01-01
  • 2013-10-19
相关资源
最近更新 更多