我正在编写一个带有“持续时间”选项的perl脚本,我希望能够以相当灵活的方式指定此持续时间,而不是只采用一个单位(例如秒数) 。 UNIX at
命令通过允许诸如“现在+ 3小时+ 2天”之类的规范来实现这种行为。对于我的程序,“now”部分是隐含的,所以我只想在加号后解析这些东西。 (注意:at
命令也会解析确切的日期规范,但我只想解析持续时间。)
是否有用于解析持续时间规范的perl模块?我不需要at
接受的确切语法,只需要任何合理的语法来指定持续时间。
编辑:基本上,我想要DateTime::Format::Flexible之类的内容而不是日期。
答案 0 :(得分:2)
查看DateTime::Duration和DateTime::Format::Duration:
use DateTime::Duration;
use DateTime::Format::Duration;
my $formatter = DateTime::Format::Duration->new(
pattern => '%e days, %H hours'
);
my $dur = $formatter->parse_duration('2 days, 5 hours');
my $dt = DateTime->now->add_duration($dur);
答案 1 :(得分:0)
Time::ParseDate非常flexible syntax for relative times。请注意,它始终返回绝对时间,因此您无法区分“现在+ 3小时+2天”和“3小时+2天”之间的差异(这两者都是parsedate
的有效输入,并且将返回相同的值)。如果您想获得持续时间,可以减去time
。
此外,它不会返回DateTime个对象,只是一个UNIX纪元时间。我不知道这对你的申请是否有问题。
答案 2 :(得分:0)
我最终选择了Time::Duration::Parse。