用于解析自然语言持续时间规范的Perl模块(类似于“at”命令)?

时间:2010-06-04 20:11:55

标签: perl parsing duration timespec

我正在编写一个带有“持续时间”选项的perl脚本,我希望能够以相当灵活的方式指定此持续时间,而不是只采用一个单位(例如秒数) 。 UNIX at命令通过允许诸如“现在+ 3小时+ 2天”之类的规范来实现这种行为。对于我的程序,“now”部分是隐含的,所以我只想在加号后解析这些东西。 (注意:at命令也会解析确切的日期规范,但我只想解析持续时间。)

是否有用于解析持续时间规范的perl模块?我不需要at接受的确切语法,只需要任何合理的语法来指定持续时间。


编辑:基本上,我想要DateTime::Format::Flexible之类的内容而不是日期。

3 个答案:

答案 0 :(得分:2)

查看DateTime::DurationDateTime::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