2012-12-03 56 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中获得。这提供了一个核心模块解决方案,而丰富的DateTime模块不幸不是核心Perl的一部分。

+1

这将转换他的数据完全相反的方向。 –

+1

@JimDavis因误读而致谢谢。 – JRFerguson