“的Perl时间解析和差异计算”;加天数:小时:分钟”;
我有一个带有时差的字符串,如:“的Perl时间解析和差异计算”;加天数:小时:分钟”;,perl,Perl,我有一个带有时差的字符串,如: 12:03:22 <- where ^ ^ ^ | | +minutes | +hours +days 我知道DateTime,但是解析输入字符串的简单方法是什么?我相信这里有一个更好的方法: use _usual_things_; my .... if($str =~ m/(.*):(.*):(.*)/) { $d = $1; $h = $2; $m = $3; } elsif( $str =~ m/(.*):(.*)/ ) {
12:03:22 <- where
^ ^ ^
| | +minutes
| +hours
+days
我知道DateTime,但是解析输入字符串的简单方法是什么?我相信这里有一个更好的方法:
use _usual_things_;
my ....
if($str =~ m/(.*):(.*):(.*)/) {
$d = $1; $h = $2; $m = $3;
}
elsif( $str =~ m/(.*):(.*)/ ) {
$h = $1; $m = $2;
} elsif ($str =~ m/\d+/ ) {
$m = $1;
}
else {
say "error";
}
如何将解析后的天、小时、分钟添加到当前日期中?如何使用
反向操作来避免检查格式
my ($m, $h, $d) = reverse split /:/, $str;
要将其添加到当前日期,只需使用DateTime:
print DateTime->now->add(days => $d // 0,
hours => $h // 0,
minutes => $m);
解析可以一次完成,但无法避免基于toke数量的分支。下面是示例实现
$Str = '12:03:22' ;
@Values = ($Str=~/\G(\d\d):?/g) ;
print "error with input" if not @Values;
if( @Values == 3) { print "Have all 3 values\n" }
elsif( @Values == 2) { print "Have 2 values\n" }
太好了!:)3分钟后开始!:)唯一的缺陷是:当$d未定义时(例如,对于字符串2:30),DateTime会向DateTime::Duration::new抱怨'days'参数(未定义)是一个'undef',这不是允许的类型之一:OK,在添加中添加//0
在$d
和$h
之后。(最新答复)
$Str = '12:03:22' ;
@Values = ($Str=~/\G(\d\d):?/g) ;
print "error with input" if not @Values;
if( @Values == 3) { print "Have all 3 values\n" }
elsif( @Values == 2) { print "Have 2 values\n" }