首先,你必须捕捉到你的输入:
my $time = "Fri 2013-06-14 0:59:15.3";
$time =~ /(\d+?):(\d+?):(.+)$/ #The time captured in three components
my $hours = $1;
my $minute = $2;
my $seconds = $3;
的regular expression描述要匹配你行的。 $
意味着将我的表情固定在行尾。 (..)
是捕获组。这些捕获了我的正则表达式中匹配的内容,并通过$1
,$2
和$3
变量使它们可用。
如果你从来没有学过正则表达式,你应该。正则表达式非常强大,您应该在上面的链接中阅读它们,或者尝试使用Perldoc tutorial。
现在,我有不同的件我的时间来捕获(并假设60秒分钟60分钟小时),我现在可以做我的计算:
my $time_in_seconds = ($hours * 3600) + ($minutes * 60) + $seconds;
my $time_in_minutes = $time_in_seconds/60;
司的计算机上具有测量精度的问题,因为它是很难用基数2表示小数。因此,我宁愿将其全部乘以,然后除以60.
一旦您有时间,您需要以您想要的格式打印出来。这就要求printf:
printf "%9.4f\n", $time_in_minutes;
的%9.4f
指定的格式。 f
表示这是一个浮点数(基本上是一个非整数)。 4
表示小数位数。 9
表示字段宽度,其中包含小数点,小数点另一边的四个和负号。因此,这将允许高达-9999.999
的宽度,这已经足够了。
把它放在一起....
#! /usr/bin/env perl
#
use warnings;
use strict;
use feature qw(say);
while (my $time = <DATA>) {
chomp $time;
$time =~ /(\d+?):(\d+?):(.+)$/; #The time captured in three components
my $hours = $1;
my $minutes = $2;
my $seconds = $3;
my $time_in_seconds = ($hours * 3600) + ($minutes * 60) + $seconds;
my $time_in_minutes = $time_in_seconds/60;
printf qq(%9.4f\n), $time_in_minutes;
}
__DATA__
Fri 2013-06-14 0:59:15.3
Sat 2013-06-15 1:01:30.6
Sun 2013-06-16 1:03:45.9
现在运行它:
$ ./test.pl
59.2550
61.5100
63.7650
看起来是正确的。
不是所有的分钟都有60秒,所以你的答案可能会在你的方法中被秒掉。 – ikegami