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

Posted

技术标签:

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

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

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

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

【问题讨论】:

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

【讨论】:

由于您选择了我的答案作为解决方案,因此我对其进行了修改以提供您在子例程中需要的功能。

以上是关于如何在 Perl 中将 dd/mm/yyyy 转换为纪元时间?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 libreoffice calc 中将日期格式从 MM/DD/YYYY 更改为 DD/MM/YYYY?

在 SSIS 中将日期 DD.MM.YYYY hh:mm:ss 转换为 YYYY-MM-DD

在SQL中将dd / mm / yyyy VARCHAR转换为yyyy-dd-mm DATETIME

在 ionic 4 + Angular 中将日期转换为 DD/MM/YYYY

CDate 无法从报表中的字符串 dd/MM/yyyy 转换

在 Hive 中将 dd/mm/yyyy/hh/mm/ss 格式更改为 yyyymm