假設我剛剛跑了10公里,現在我有10毫米的分段時間以MM :: SS的形式出現。我想要一個簡單的方法來加總任意數量的分割時間並對其進行平均。例如,也許我想看看最後5公里時與前5公里相比要快多少(或更慢)。添加MM :: SS時間,將它們分開並打印平均值
我可以通過解析時間,將它們分成幾秒然後將它們轉換回MM :: SS來做到這一點。數學並不難,但我想知道CPAN上的某些東西是否已經以簡單的方式做到了這一點。我第一次嘗試使用DateTime,但由於閏秒,它不會從秒轉換爲分鐘。
要清楚,我不在乎在這方面的閏秒,但我很好奇圖書館是否存在。舉個例子,這是我嘗試過的。
#!/usr/bin/env perl
use strict;
use warnings;
use feature qw(say);
use DateTime::Format::Duration;
my $formatter = DateTime::Format::Duration->new(pattern => '%M:%S');
my @splits = @ARGV;
my $split_number = @splits;
my $total = $formatter->parse_duration(shift @splits);
foreach my $split (@splits) {
$total->add_duration(
$formatter->parse_duration($split));
}
say 'Total time: ' . join ':', $total->minutes, $total->seconds;
$total->multiply(1/$split_number);
say 'Average time: ' . join ':', $total->minutes, $total->seconds;
say 'Using DateTime::Format::Duration: ' . $formatter->format_duration($total);
和樣品運行:
$ perl script/add-splits.pl 1:30 2:30
Total time: 3:60
Average time: 1.5:30
Using DateTime::Format::Duration: 01:30
所以,你可以看到,持續時間對象本身,給了我一個正確的答案,而不是一些人想要破譯。
DateTime :: Format ::持續時間試圖有幫助,但在過程中拋出30秒。
我不是在尋找原始代碼來做到這一點。我感興趣的是CPAN是否已經存在。
有可能在日期時間::格式::持續時間如何彙總秒到幾分鐘......你可以提交一個bug票的錯誤。 – xxfelixxx
@xxfelixxx,謝謝。我和DateTime的作者聊過,他建議實際上不應該支持乘以非整數單位,所以我提交了一個針對DateTime :: Duration的錯誤https://rt.cpan.org/Ticket/Display .html?id = 117866&results = 6ab71e8eea43129a0c4f4c5702e469f5 – oalders
@oalders你能解釋一下嗎?我看到的問題本身不是乘法,而是分鐘不能轉換爲秒,反之亦然。所以'3(min)/ 2'必須返回'1.5'。他們說,在文檔中,'DateTime'和':: Duration'(解釋的鏈接在我的答案中)。我對這個問題感興趣,並搜索了我所知道的或可能找到的所有日期/時間模塊,並且沒有發現任何可以正確執行'mm:ss'的和/ ave的任何內容。 (你的'1:30' +'2:30'對兩者來說都是一個很好的測試案例。) – zdim