我正在添加兩個日期并嘗試計算時間,但出現以下錯誤:
Error parsing time at /usr/local/lib/x86_64-linux-gnu/perl/5.30.0/Time/Piece.pm line 598.
我用 cpan: 安裝 Time::Piece cpan Time::Piece。
這是我的代碼:
our @months = qw( 01 02 03 04 05 06 07 08 09 10 11 12 );
our @days = qw(Domingo Segunda Tre?a Quarta Quinta Sexta Sabado Domingo);
($sec,$min,$hour,$mday,$mon,$year,$wday,$day,$isdst) = localtime();
our $ano = "2021";
our $day = "$mday";
our $mes = $months[$mon];
our $data = $mes."-".$day."-".$ano;
our $horario = $hour.":".$min.":".$sec;
our $horario2 = $hour.":".$min.":".$sec;
our $data1 = $ano."-".$mes."-".$day;
our $data2 = $day."/".$mes."/".$ano;
our $str1 = 'Execution completed at '.$data2.' '.$horario.' AM';
our @mes = qw( Jan Feb Mar APr May Jun Jul Agu Sep Oct Nov Dec );
our @days = qw(Domingo Segunda Tre?a Quarta Quinta Sexta Sabado Domingo);
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime();
$nomeMes = $mes[$mon];
our @mes = qw( Jan Feb Mar APr May Jun Jul Agu Sep Oct Nov Dec );
our @days = qw(Domingo Segunda Tre?a Quarta Quinta Sexta Sabado Domingo);
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime();
our $data2 = $day."/".$mes."/".$ano;
our $horario = $hour.":".$min.":".$sec;
my $str2 = 'Execution completed at '.$data2.' '.$horario.' AM';
my @times = map Time::Piece->strptime(/(\d. M)/, '%m/%d/%Y %H:%M:%S %p'), $str1, $str2;
my $delta = $times[1] - $times[0];
$tempo = $delta->pretty;
我究竟做錯了什么?我該怎么做才能使此功能正常作業?
uj5u.com熱心網友回復:
匹配的模式$str1是20/12/2021 13:58:3 AM
問題:
沒有第 20 個月
沒有 13 點
可以在夏令時的開關附近給出錯誤的答案。
此外,還有一些問題被strptime忽略了:
您應該使用
%I而不是%H12 小時的時間。缺少通常預期的前導零(分鐘和秒)。
根據您在問題之外提供的資訊,您似乎在問以下問題:
給定本地時間的年、月、日、時、分和秒分量,我如何獲得相應的紀元時間以便我可以執行差異?
為此,請使用Time::Local的timelocal*.
use Time::Local qw( timelocal_posix );
my $time = timelocal_posix( $sec, $min, $hour, $day, $month - 1, $year 1900 );
您也可以使用DateTime。這個更強大的模塊可以為您提供除秒以外的數量差異。
無論哪種方式,您在從 DST 切換附近仍然會遇到問題。沒有足夠的資訊來解決這個問題。這就是在沒有偏移的情況下處理本地時間的問題。
uj5u.com熱心網友回復:
我使用腳本:
our $str2 = $ano.'/'.$mes.'/'.$day.' '.$hour.':'.$min.':'.$sec.'.267-05:00';
my @times = map Time::Piece->strptime( s/\..*//r, '%Y/%m/%d %H:%M:%S'), $str1, $str2;
our $delta = $times[1] - $times[0];
print $delta->pretty;
這是作業。
非常感謝池上的幫助。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/388098.html
