4

我意识到 Perl 有 strftime,它允许你传递一个格式化对象。我想知道是否可以找到的功能更像以下(来自 PHP):

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

其原因是业务需求需要比较用户提供的日期以进行验证和扩展逻辑(此日期是否属于还提供的另一个日期范围等)。现在,我意识到我可以编写一个专门用于执行此操作的整个库,并且我意识到日期解析存在许多潜在的陷阱,您永远不应该相信用户输入,但这里有一些基本假设。

  1. 输入实际上是从任意数量的软件包中输出的,这些软件包符合它们自己的日期格式内部规范。它们都遵循一些标准,但这些标准在程序之间并没有统一规范。话虽如此,我应该总是比较来自同一个程序的两个日期,但我可能永远不知道它们可能遵循什么格式。
  2. 我意识到任何给定系统的标准可能会有所不同,但这里的假设是我们将所有日期都输入到同一事物中,因此我们可以信任一致的实现,希望在 CPAN 或其他易于更新的模块中实现.
4

3 回答 3

13

Date::Parse supplystr2time它执行此操作。

文档列出了模块可以解析的一些示例:

 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 
于 2012-12-03T18:53:37.093 回答
5

Perl 中日期/时间操作的标准是 DateTime 项目。

https://metacpan.org/pod/DateTime

于 2012-12-03T18:54:28.697 回答
1

strptime对于 Perl 可以在核心模块Time::Piece中获得。这提供了一个核心模块解决方案,而不幸的是,丰富的DateTime模块不是核心 Perl 的一部分。

于 2012-12-03T22:20:40.563 回答