如何在不关心日期的情况下获取时间戳并进行数学运算



我正在尝试在Perl中使用时间戳(或者更确切地说,没有时间戳,但我认为我需要使用时间戳(进行一些数学运算,这不是我非常熟悉的语言。我特别不熟悉它的日期和时间函数

基本上,我有一个函数,它将5个整数作为自变量。

sub calculateEndTime {
my ($hour, $minute, $second, $roundingInterval ,$buffer)
...
}

我想做的数学可能无关紧要,但很简单:

  1. 将分钟四舍五入到最接近的$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;
  1. 如果给定的小时、分钟、秒在四舍五入时间两侧的$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 );
}

最新更新