【问题标题】:Perl and epoch time questionPerl 和纪元时间问题
【发布时间】:2011-09-24 20:07:51
【问题描述】:

如何从 perl 中获取当前纪元时间并找到 6 个月前的纪元时间?

我需要比较文件的创建日期以查看它是否为 6 个月或更早。

【问题讨论】:

  • 两个数字的差值是如何计算的? X 秒(或毫秒等)如何转换为天(或月)? (要 100% 准确,您需要一个了解闰日之类的 Date 模块。但是,对于“6 个月”,基本数学是 A-OK。)
  • 我只需要一个粗略的计算,不需要纳秒什么的。我只需要查看文件是否超过 6 个月,如果是我们删除它。
  • @pst:对于“一周”或“N 天”,基本数学是可以的,但六个月中的天数取决于开始/结束日期。
  • POSIX 文件没有创建日期。
  • @Dave Sherohman "30.5 天" ;-)

标签: perl datestamp


【解决方案1】:

Date::Calc 包有相应的功能。使用 Date_to_Time 和 Time_to_Date 转换到/从纪元时间,并使用 Add_Delta_YM 添加 -6 个月。

【讨论】:

  • 呸!我无法在 Windows 上获取该模块。
  • 根据您可以容忍的错误程度,您可以通过从现在开始减去 (365 * 24 * 60 * 60 * 500) 来计算纪元时间减去六个月。 (那些应该是长值。)最后的 500(而不是 1000)是半年而不是一整年。这可能会推迟一两天。
【解决方案2】:

可以使用DateTime计算差异:

use DateTime;

my $dt = DateTime->now;  # or if you have epoch: DateTime->from_epoch( 'epoch' => $epoch );
$dt->subtract( DateTime::Duration->new( 'months' => 6 ) );

【讨论】:

  • 哦,我喜欢那个解决方案,你知道 DateTime 是不是一个核心模块吗?
  • SolignisDateTime 不是核心模块。您可以使用corelist 检查模块是否在核心中。示例:corelist DateTime.
  • Solignis:不客气。 :-)
【解决方案3】:

粗略准备好了吗?

perl -le '$sixm = 30.5*6; for ( glob("*") ) { print "delete $_" if -M > $sixm }'

【讨论】:

    猜你喜欢
    • 2015-02-19
    • 1970-01-01
    • 2012-02-04
    • 2017-04-02
    • 2021-11-23
    • 2015-12-22
    • 2016-05-31
    • 2016-02-06
    • 2011-04-27
    相关资源
    最近更新 更多