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

3
我已经编写了以下代码来从服务器获取日期并以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

我想在时间上加两分钟,并需要替换文件中现有的时间,请给我一些想法。


不要使用 system,而是使用 $a=qx( date '+...'),然后(假设它需要用于其他进程)将 $a 写入文件。不要使用裸文件句柄;改用 open my $f, $path, $mode。如果您只是要附加一个换行符,请勿 chop 变量。不要使用人类可读的时间戳:改用 epoch 时间。 - William Pursell
@WilliamPursell:不要使用外部命令来获取任何格式的当前时间。 - ysth
1
请更好地解释您想要做什么。是修改包含日期/时间的文件,将该时间提前两分钟?还是要将当前时间加上两分钟打印到控制台?或者将其写入文件? - Borodin
2个回答

4

将您的日期命令更改为添加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));

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接