1

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

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


编辑:基本上,我想要像DateTime::Format::Flexible这样的持续时间而不是日期。

4

3 回答 3

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);
于 2010-06-04T20:20:39.623 回答
0

Time::ParseDate具有相当灵活的相对时间语法。请注意,它总是返回一个绝对时间,因此您无法分辨“现在 + 3 小时 + 2 天”和“3 小时 + 2 天”之间的区别(这两个都是 的有效输入parsedate,并且将返回相同的值)。time如果您想获得持续时间,则可以减去。

此外,它不返回DateTime对象,只是一个 UNIX 纪元时间。我不知道这是否对您的应用程序有问题。

于 2010-06-05T08:19:16.807 回答
0

我最终选择了Time::Duration::Parse

于 2010-06-06T16:13:39.107 回答