【问题标题】:Comparing date and time and the same time in perl在perl中比较日期和时间以及相同的时间
【发布时间】:2017-07-10 08:31:04
【问题描述】:

我想比较日期和时间检查我要打开的文件中的时间戳是否具有相同或更大的日期和时间,就像我的时间戳看起来像这样:

$Date = "20170608";
$Time = "105006";

我的主要问题是如何在不添加 perl 库的情况下有效地做到这一点,以及如何在出现日期切换情况时检查它,例如 23:59:44

【问题讨论】:

  • 现在是 1:05:06 吗?
  • 是的,我的错
  • “不添加 perl 库” 你为什么要限制自己只使用 Perl 的 5% 的功能?
  • 图书馆有什么建议吗?
  • Re "无需添加 perl 库",Perl 基本上只附带安装模块所需的东西。其余的主要是出于历史原因。把自己限制在这个范围内有点愚蠢!

标签: perl date compare


【解决方案1】:

Time::Piece 是 perl 的核心,支持'strptime'。

#!/usr/bin/env perl

use strict;
use warnings;
use Time::Piece;

my $Date = "20170608";
my $Time = "10506";

my $ts = Time::Piece->strptime( "$Date $Time", "%Y%m%d %H%M%S" );
print $ts, "\n";

print "Delta:", $ts->epoch - time(), "\n";

不清楚$Time 代表的时间 - strptime 将其转换为 10:50:06,但我猜它可能是 01:05:06?

如果是这样,那么零填充。

$Time = sprintf ( "%06d", $Time );

要从文件元数据中读取时间戳,则需要stat

my $mtime = (stat $filename)[9];

【讨论】:

  • 假设是 10:50:06 问题是我不打算将它与当前时间进行比较,而是与保存为变量的日期进行比较。问题是时间可能是错误的——它会在下午 12 点之后变成 00:00:00,然后我必须以某种方式检查日期
  • 检查时间是今天还是昨天可能比您想象的要容易 - 转换它,假设它是今天 - 然后查看时间增量的大小。如果它 > 1d,那么它很可能是错误的日期。不过,在不知道您的时间比较的情况下,我无法详细说明。
  • $DataStart = "20170608"; $TimeStart = "235806"; $DatetoCompare = "20170609"; $TimetoCompare = "000106";
猜你喜欢
  • 1970-01-01
  • 2015-07-20
  • 1970-01-01
  • 1970-01-01
  • 2012-01-20
  • 1970-01-01
  • 2020-12-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多