如何在Perl中的文件中添加时间并将其替换?

时间:2013-07-29 13:36:48

标签: perl

我已经使用以下代码从服务器获取日期并以yy / mm / dd-hh / mm / ss格式显示。

#!/usr/bin/perl
system(`date '+ %Y/%m/%d-%H:%M:%S' >ex.txt`);
open(MYINPUTFILE, "/tmp/ranjan/ex.txt");
while(<MYINPUTFILE>)
{
    chomp;
    print "$_\n";
}
close(MYINPUTFILE);

输出:

2013/07/29-18:58:04

我想添加两分钟的时间,需要更换文件中的时间,请给我一些想法。

2 个答案:

答案 0 :(得分:3)

更改日期命令以添加2分钟:

date --date "+2 min" '+ %Y/%m/%d-%H:%M:%S'

或Perl版本:

use POSIX;
print strftime("%Y/%m/%d-%H:%M:%S", localtime(time + 120));

答案 1 :(得分:3)

最好使用Time::Piece来解析和格式化日期。它是一个内置模块,不需要安装。

异常,在这种情况下,替换日期/时间字符串与从文件读取的原始字符串的长度完全相同,因此可以就地进行修改。通常,文件的总长度会发生变化,因此需要创建新文件并删除旧文件,或者将整个文件读入内存并再次写出来。

此程序打开文件以进行同时读/写,从文件中读取第一行,使用Time::Piece解析它,添加两分钟(120秒),再次搜索文件的开头,然后打印重新格式化的新日期/时间与原始日期/时间重新格式化为文件。

use strict;
use warnings;
use autodie;

use Time::Piece;
my $format = '%Y/%m/%d-%H:%M:%S';

open my $fh, '+<', 'ex.txt';

my $date_time = <$fh>;
chomp $date_time;
$date_time = Time::Piece->strptime($date_time, $format);

$date_time += 60 * 2;

seek $fh, 0, 0;
print $fh $date_time->strftime($format);
close $fh;

<强>输出

2013/07/29-19:00:04