perl - 将旧的 Unix 日期转换为 Perl 并进行比较

标签 perl shell date time

要求 - 我的文件名为“Rajesh.1202242219”。数字只不过是日期“date '+%y''%m''%d''%H''%M'”格式。 现在我正在尝试编写一个 perl 脚本来从文件名中提取数字并与当前系统日期和时间进行比较,并根据此比较的输出,使用 perl 打印一些值。

方法:

从文件名中提取数字:

if ($file =~ /Rajesh.(\d+).*/) {
print $1;
        }

将这个时间转换成perl中可读的时间

my $sec  =  0;  # Not Feeded
my $min  =  19;
my $hour =  22;
my $day  =  24;
my $mon  = 02   - 1;
my $year = 2012 - 1900;
my $wday = 0;   # Not Feeded
my $yday = 0;   # Not Feeded

my $unixtime = mktime ($sec, $min, $hour, $day, $mon, $year, $wday, $yday);
print "$unixtime\n";
my $readable_time = localtime($unixtime);
print "$readable_time\n";

查找当前时间并比较...

my $CurrentTime = time();
my $Todaydate = localtime($startTime);

但这里的问题是,我没有得到如何从 $1 中提取 2 位数字并分配给 $sec$min 的解决方案> 等。有什么帮助吗?

此外,如果您对这个问题陈述有好的方法,请与我分享

最佳答案

我喜欢使用时间对象来简化逻辑。我用 Time::Piece在这里是因为它简单且重量轻(并且是核心的一部分)。 DateTime 可以是另一种选择。

use Time::Piece;
my ( $datetime ) = $file =~ /(\d+)/;
my $t1 = Time::Piece->strptime( $datetime, '%y%m%d%H%M' );
my $t2 = localtime(); # equivalent to Time::Piece->new

# you can do date comparisons on the object
if ($t1 < $t2) {
    # do something
    print "[$t1] < [$t2]\n";
}

关于perl - 将旧的 Unix 日期转换为 Perl 并进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9465036/

相关文章:

javascript - 使用 getDay Javascript 获取明天的日期

perl - 请求帮助以了解给定代码中 .. 运算符的行为

Perl 电子邮件依赖项

Perl Catalyst 搜索功能可搜索多列

python - 激活 virtualenv 然后运行另一个 Python 脚本的 Python 脚本?

linux - 仅在命令失败时重定向标准输出?

sql - Postgresql 在月份范围之间进行选择

python - 使用python检查Servicenow票证的年龄

perl - 我的模拟结果不直观

shell - "let"内部shell 命令在shell 脚本中不起作用?