#!/usr/bin/perl
sub parkingcharge {
sub exittime
{
($sec, $min, $hour) = localtime();
print "exit time:$hour:$min:$sec\n";
}
my $exit = exittime();
my $entry = "9:10:8";
print "\nvehicle entry time is :$entry\n";
print "\nvehicle exit time is :$exit\n";
my $parkingCharge = ($entry - $exit);
print "\ntotal parking charge is : $parkingCharge\n";
}
parkingcharge();
输出显示如下
exit time:5:46:57
vehicle entry time is :9:10:8
vehicle exit time is :1
total parking charge is : 8
我想在Perl车辆管理计划中找到停车费。费率是每小时2美元,所以我想找到输入时间和退出时间之间的差异,以小时为单位乘以2.我写的代码会产生错误的结果。
如何以小时计算时间差异?
答案 0 :(得分:1)
您可以使用Perl附带的Time::Piece。它为您提供了一种方便的方法来将日期解析为Time :: Piece对象,这些对象基本上是具有语法糖的epoch时间戳。关于他们的好处是你可以在数学中使用它们,你会得到几秒钟。
因为你只有时间,我们需要在进入和退出时间都有相同的日期。一种方法是检查今天的日期并在两个变量中使用它。但是更容易将其排除在外。 Time :: Piece会假设它是1970-01-01
,这很好,因为我们不在乎。只要你不能停放过夜,两个时间戳都有相同的日期,这一点非常重要。
use strict;
use warnings;
use Time::Piece;
my $entry = Time::Piece->strptime( '9:10:8', '%H:%M:%S' );
我们使用the strptime
method来解析输入时间。第二个参数是placeholders的模式。 %H
是24小时制表示的小时,%M
是分钟,%S
是秒。这也可以在没有前导零的情况下工作。
如果您1970-01-01 09:10:08
,我们现在的参赛日期为Thu Jan 1 09:10:08 1970
或print $entry
。
接下来我们需要获得退出时间。
my ( $sec, $min, $hour ) = localtime;
my $exit = Time::Piece->strptime( "$hour:$min:$sec", '%H:%M:%S' );
因为在标量上下文中仅使用localtime
会给我们今天的日期,所以我们必须做一个额外的步骤。你的代码已经有了这一刻的秒,分和小时。我们只是以正确的格式将其用作字符串,并将其以strptime
的形式提供给$entry
,就像我们对Thu Jan 1 14:46:56 1970
所做的那样。现在我们有了退出时间戳,在我写这篇文章的时候是my $duration = $exit - $entry;
my $duration_in_hours = $duration / 60 / 60;
。
获取持续时间是一个简单的减法问题。把它转换成几小时只是60分钟,60分钟。
$duration_in_hours
我现在5.61333333333333
是my $fee_started_hours = int( $duration_in_hours + 1 ) * $hourly_fee;
。如果您希望人们为每个开始时间付费,您必须进行整理。
my $fee_full_hours = int( $duration_in_hours ) * $hourly_fee;
我宁愿只支付整整几个小时的停车时间,所以我想要更多地停车。
template