2013-07-29 3 views
3

У меня есть следующий код для получения даты с сервера и отображения его в формате yy/mm/dd-hh/mm/ss.Как добавить время и заменить его в файле на Perl?

#!/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 

Я хочу добавить две минуты времени, и нужно заменить время присутствующий в файле, Pls дать мне некоторые идеи.

+0

Вместо 'system' используйте' $ а = QX (дата '+ ...') ', а затем (если это необходимо для некоторого другого процесса) напишите '$ a' в файл. Не используйте голые дескрипторы файлов; используйте 'open my $ f, $ path, $ mode' вместо этого. Не 'chop' переменная, если вы просто собираетесь добавить в нее новую строку. Не используйте человеческие метки времени: вместо этого используйте эпоху. –

+0

@WilliamPursell: не используйте внешнюю команду, чтобы получить текущее время в * любом * формате – ysth

+1

Пожалуйста, xplain лучше, что вы хотите сделать. Можно ли изменить файл, содержащий дату/время, чтобы продвинуть это время на две минуты? Или вы хотите распечатать текущее время плюс две минуты на консоли? Или записать его в файл? – Borodin

ответ

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)); 
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 
Смежные вопросы