我正在尝试在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)
这就是它崩溃的地方,我需要一个时间戳来检查这一点,手动检查时间是否流逝会很痛苦。那么,当我不在乎日期时,我如何从一小时、一分钟和一秒创建时间戳呢?只给它当前日期或其他占位符?
只需几秒钟。那么你只需要
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 );
}