我正在嘗試在 Perl 中使用時間戳(或者更確切地說沒有時間戳,但我認為我需要使用時間戳)做一些數學運算,這不是我非常熟悉的語言。我對它的日期和時間功能特別不熟悉。
基本上我有一個函式,它需要 5 個整數作為引數。
sub calculateEndTime {
my ($hour, $minute, $second, $roundingInterval ,$buffer)
...
}
我想做的數學可能無關緊要,但很簡單:
- 將分鐘四舍五入到最接近的 $roundingInterval。例如,如果是 15,則四舍五入到最接近的一刻鐘。我用下面的來做到這一點。
my $nearestInterval = round($minute / $roundingInterval) * $roundingInterval;
$hour = $hour 1 if $nearestInterval == 60; #That's gonna screw up future calculations
$nearestInterval = 0 if $nearestInterval == 60;
- 如果給定的小時、分鐘、秒在
$buffer四舍五入時間的任一側的分鐘內(默認為 5 分鐘),則回傳初始($hour, $minute, $second).
這就是它崩潰的地方,我需要一個時間戳來檢查這一點,手動檢查小時是否超過等會很痛苦。所以當我不這樣做時,如何從一小時、一分鐘和一秒創建一個時間戳不在乎日期?只是給它當前日期或其他占位符?
uj5u.com熱心網友回復:
只需幾秒鐘即可作業。那么你所需要的就是
my $rounded = round( $time / $internal ) * $interval;
if ( abs( $rounded - $time ) < $buffer ) {
$rounded = $time;
}
sub to_time {
my $hours = shift;
my $minutes = shift;
my $seconds = shift;
my $time = ( $hour * 60 $minutes ) * 60 $seconds;
return $time;
}
sub from_time {
my $time = shift;
my $seconds = $time % 60; $time = ( $time - $seconds ) / 60;
my $minutes = $time % 60; $time = ( $time - $minutes ) / 60;
my $hours = $time;
return ( $hours, $minutes, $seconds );
}
sub calculate_end_time {
my ( $hours, $minutes, $seconds, $interval, $buffer ) = @_;
my $time = to_time( $hours, $minutes, $seconds );
$interval *= 60;
$buffer *= 60;
my $rounded = round( $time / $internal ) * $interval;
if ( abs( $rounded - $time ) < $buffer ) {
$rounded = $time;
}
return from_time( $rounded );
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/506234.html
標籤:perl
上一篇:關于散列和陣列的perl代碼解釋
下一篇:需要Perl語法的說明
