Модуль Perl для парсинга спецификаций продолжительности времени естественного языка (подобный “при” команде)?

Я пишу сценарий жемчуга, который выбирает вариант "продолжительности", и я хотел бы смочь указать эту продолжительность довольно гибким способом, только в противоположность взятию единого блока (например, число секунд). UNIX at управляйте реализует этот вид поведения, путем разрешения спецификаций такой как "теперь + 3 часа + 2 дня". Для моей программы "теперь" подразумевается часть, таким образом, я просто хочу проанализировать материал после знака "плюс". (Отметьте: at управляйте также анализирует спецификации точной даты, но я только хочу проанализировать продолжительности.)

Существует ли модуль жемчуга для парсинга спецификаций продолжительности как это? Мне не нужен точный синтаксис, принятый at, просто любой разумный синтаксис для определения продолжительностей времени.


Править: В основном я хочу что-то как DateTime:: Формат:: Гибкий на время вместо дат.

1
задан Ryan Thompson 4 June 2010 в 21:54
поделиться

3 ответа

В итоге я выбрал Time :: Duration :: Parse .

0
ответ дан 3 September 2019 в 00:02
поделиться

Взгляните на 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);
2
ответ дан 3 September 2019 в 00:02
поделиться

Time::ParseDate имеет довольно гибкий синтаксис для относительного времени. Обратите внимание, что он всегда возвращает абсолютное время, поэтому вы не сможете отличить "сейчас + 3 часа + 2 дня" от "3 часа + 2 дня" (оба эти значения являются допустимыми входными данными для parsedate и вернут одно и то же значение). Вы можете вычесть time, если хотите получить длительность.

Кроме того, он не возвращает объекты DateTime, только время эпохи UNIX. Я не знаю, является ли это проблемой для вашего приложения.

0
ответ дан 3 September 2019 в 00:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: