将HH:MM转换为十进制小时

Mac*_*eyo 0 regex perl awk

我正在尝试将格式为HH:MM的文本文件中的一些时间戳转换为数字格式(例如,12:30- > 12,5)1,使用Perl正则表达式以便将来更容易处理.

我在这个主题上相当新,所以我正在努力与MM部分,我不知道如何转换它.目前我有这样的事情:

while ( <FILE> ) {
    $line = $_;
    $line =~ s/([0[0-9]|1[0-9]|2[0-3]):([0-5][0-9])/$2,$1/g;
    print $line;    
}  
Run Code Online (Sandbox Code Playgroud)

1)在我的语言环境中,逗号,用于小数点.想象一下,.所以这意味着12个半,或12.5.

sim*_*que 5

我不会使用正则表达式进行转换.它可以用非常简单的数学来完成.使用搜索模式解析时间,然后通过类似的方式传递它.

sub to_decimal {
    my $time = shift;

    my ($hours, $minutes) = split /:/, $time;
    my $decimal = sprintf '%.02d', ($minutes / 60) * 100 ;

    return join ',', $hours, $decimal;
}
Run Code Online (Sandbox Code Playgroud)

如果你在这样的循环中运行它:

for (qw(00 01 05 10 15 20 25 30 35 40 45 50 55 58 59)) {
    say "$_ => " . to_decimal("12:$_");
}
Run Code Online (Sandbox Code Playgroud)

你得到:

00 => 12,00
01 => 12,01
05 => 12,08
10 => 12,16
15 => 12,25
20 => 12,33
25 => 12,41
30 => 12,50
35 => 12,58
40 => 12,66
45 => 12,75
50 => 12,83
55 => 12,91
58 => 12,96
59 => 12,98
Run Code Online (Sandbox Code Playgroud)