2012-12-03 2 views
3

Я понимаю, что Perl имеет strftime, что позволяет передавать объект форматирования. Функциональность Я интересно, если я могу найти больше похожа на следующем (с PHP):Perl-эквивалент PHP strtotime()?

$string1 = "Jun 6, 2012"; 
$string2 = "June 06 2012"; 
if (strtotime($string1) == strtotime($string2)) { 
    echo "BLAMMO!"; 
} 
// will echo "BLAMMO!" 

Причиной этого является бизнес-потребностью, в которых дата пользователя при условии, должна быть сравнена для проверки и расширенной логики (эта дата относится и к другому датеангу, предоставленному и т. д.). Теперь я понимаю, что могу написать целую библиотеку, посвященную этому, и я понимаю, что существует множество потенциальных ошибок с обработкой даты, и вы никогда не должны доверять пользовательскому вводу, но вот некоторые основные предположения.

  1. Ввод действительно выводится из любого количества программных пакетов, соответствующих их собственным внутренним спецификациям для форматирования даты. Все они соответствуют некоторым стандартам, но эти стандарты неравномерно нормализованы между программами. При этом я всегда должен сравнивать две даты из одной и той же программы, но я, возможно, никогда не знаю, в каком формате они могут следовать.
  2. Я понимаю, что стандарты любой системы, вероятно, будут разными, но предположение здесь состоит в том, что мы кормим ВСЕ наши даты в одно и то же, поэтому мы можем доверять последовательной реализации, надеюсь, что-то в CPAN или другом легко обновляемый модуль.

ответ

11

Date::Parse Поставка str2time, который делает это.

В документации приведены некоторые примеры, что модуль может разобрать:

1995:01:24T09:08:17.1823213   ISO-8601 
1995-01-24T09:08:17.1823213 
Wed, 16 Jun 94 07:29:35 CST   Comma and day name are optional 
Thu, 13 Oct 94 10:13:13 -0700 
Wed, 9 Nov 1994 09:50:32 -0500 (EST) Text in()'s will be ignored. 
21 dec 17:05       Will be parsed in the current time zone 
21-dec 17:05 
21/dec 17:05 
21/dec/93 17:05 
1999 10:02:18 "GMT" 
16 Nov 94 22:28:20 PST 
1

strptime для Perl может быть получен в модуле ядра Time::Piece. Это предлагает решение для основного модуля, тогда как модуль rich DateTime, к сожалению, не является частью ядра Perl.

+1

Это будет преобразование его данных в точно противоположном направлении. –

+1

@JimDavis исправлено за неправильное чтение с благодарностью. – JRFerguson