作为初学者,我努力奋斗。
我想从用户那里得到这样的日期时间输入。
2018/06/21-10:30
然后,我有另外两次,标志着一段时间的开始和结束。
上午9:00及下午4:00
我想要的是脚本接受输入。将日期部分应用于另外两次,这样它们将如下所示:
2018/06/21-09:00和2018/06/21-14:00
然后,我希望运行来自用户的输入,并检查输入的时间是否在另外两个新形成的日期时间内。
有什么好办法吗?还是另一种方法?
*编辑1::
好的。我一直在玩a我找到了一个方法。
有什么建议吗,还是我走对了路?
#!/usr/bin/env perl
use strict;
use warnings;
use 5.010;
use utf8;
use open qw(:encoding(UTF-8) :std);
use DateTime::Format::Strptime;
print " Enter START with following pattern Y/m/d-H:M -> ";
chomp ( my $input1 = <> );
my $parser = DateTime::Format::Strptime->new(pattern => '%Y/%m/%d-%H:%M');
my $dt1 = $parser->parse_datetime($input1) or die;
my $wd_start_ftd = $dt1->ymd('/')."-09:00";
my $wd_stop_ftd = $dt1->ymd('/')."-14:00";
print "\n Start of the day is ", $wd_start_ftd;
print "\n End of the day is ", $wd_stop_ftd;这给了我这个
输入模式Y/m/d-H:M -> 2018/06/07-10:30 一天的开始是2018/06/07-09:00一天结束是2018/06/07-14:00
现在,我只需要得到一些东西来测试输入在开始值和停止值之间是否是ib。
发布于 2018-06-09 20:14:26
下面是一个充分发挥作用的例子。它可能需要对您自己的个人喜好进行一些调整,比如您想要的输入信息和其他东西的打印。但你可能知道怎么做!
如果您运行脚本,它将等待输入的YYYY/MM/DD-hh:mm格式,并将告诉您,如果是上午9点到下午2点。
use strict;
use warnings;
use DateTime::Format::Strptime;
chomp ( my $input = <> );
my $strptime = DateTime::Format::Strptime->new(pattern => '%Y/%m/%d-%H:%M');
my $dt_check = $strptime->parse_datetime($input);
my $dt_start = clone_with_time($dt_check, '09:00');
my $dt_stops = clone_with_time($dt_check, '14:00');
my $check = ( $dt_start lt $dt_check and $dt_check lt $dt_stops ) ? "Yay": "Nay";
print "$check\n";
# return a cloned DateTime object, set with the given time
sub clone_with_time {
my ($dt_old, $time) = @_;
my ($hh, $mm) = split /:/, $time;
my $dt_new = $dt_old->clone;
$dt_new->set( hour => $hh, minute => $mm);
return $dt_new
}clone_with_time子例程接受一个DateDime对象(我们从输入中获得的对象)和一个hh:mm格式的时间字符串。然后,子例程克隆该对象并相应地设置时间。
在本例中,如果需要多次重复某些语句以生成$dt_start和$dt_stops,那么子例程是很好的。它保持了主程序的清洁和易于跟踪。在编写代码时,请记住干的。
TIMTOWTDI
https://stackoverflow.com/questions/50776304
复制相似问题