什么语言有最简单,最强大的日期解析?

时间:2009-01-27 18:51:02

标签: language-agnostic

我知道java有SimpleDateFormat,看起来相当强大,但你需要提前知道格式才能正确使用它。
TCL的时钟扫描功能似乎是我见过的最简单,最强大的功能。

e.g。时钟扫描“1/08/2009 12:33:01 AM”的工作方式与中文相同      时钟扫描“8-Jan-2009 12:33:01”

编辑:好的,删除它必须是内置功能的想法。 Perl和Python是最好的吗?

5 个答案:

答案 0 :(得分:2)

Perl的Date :: Parse模块(我不知道它可以被认为是内置于该语言,但它是一个CPAN模块,这对我来说足够好)已经为我节省了无数个小时的数据转换项目。从文档(http://metacpan.org/pod/Date::Parse):

Below is a sample list of dates that are known to be parsable with Date::Parse:

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 :(得分:2)

Python没有内置的库,但优秀的dateutil库提供了一个非常适应的parse()方法。

从简单(假设今天是9月25日):

>>> parse("Thu Sep 25 2003")
datetime.datetime(2003, 9, 25, 0, 0)

>>> parse("Sep 25 2003")
datetime.datetime(2003, 9, 25, 0, 0)

>>> parse("Sep 2003", default=DEFAULT)
datetime.datetime(2003, 9, 25, 0, 0)

>>> parse("Sep", default=DEFAULT)
datetime.datetime(2003, 9, 25, 0, 0)

>>> parse("2003", default=DEFAULT)
datetime.datetime(2003, 9, 25, 0, 0)

暧昧:

>>> parse("10-09-2003")
datetime.datetime(2003, 10, 9, 0, 0)

>>> parse("10-09-2003", dayfirst=True)
datetime.datetime(2003, 9, 10, 0, 0)

>>> parse("10-09-03")
datetime.datetime(2003, 10, 9, 0, 0)

>>> parse("10-09-03", yearfirst=True)
datetime.datetime(2010, 9, 3, 0, 0)

全面了解:

>>> parse("Wed, July 10, '96")
datetime.datetime(1996, 7, 10, 0, 0)

>>> parse("1996.07.10 AD at 15:08:56 PDT", ignoretz=True)
datetime.datetime(1996, 7, 10, 15, 8, 56)

>>> parse("Tuesday, April 12, 1952 AD 3:30:42pm PST", ignoretz=True)
datetime.datetime(1952, 4, 12, 15, 30, 42)

>>> parse("November 5, 1994, 8:15:30 am EST", ignoretz=True)
datetime.datetime(1994, 11, 5, 8, 15, 30)

>>> parse("3rd of May 2001")
datetime.datetime(2001, 5, 3, 0, 0)

>>> parse("5:50 A.M. on June 13, 1990")
datetime.datetime(1990, 6, 13, 5, 50)

在这里查看文档:

http://labix.org/python-dateutil#head-c0e81a473b647dfa787dc11e8c69557ec2c3ecd2

答案 2 :(得分:0)

日期的问题是一直存在的国际化问题 - 即使是一个看着“2009年8月1日上午12:33:01”的人也会确定它应该是1月8日或8月1日。'< / p>

我已经看到日期/时间解析器将接受大量格式,并为您提供各种实际意义的选项。您还可以根据区域设置为各种格式分配优先级。不幸的是我现在找不到它。它被编写为C ++库。我不知道任何可以处理内置此类事情的语言。

答案 3 :(得分:0)

我喜欢SQL Server,在2008年它一直到100纳秒精度

所有可用的样式,请参见此处:http://msdn.microsoft.com/en-us/library/ms187928.aspx

你会使用ISO8601(yyyy-mm-ddThh:mi:ss.mmm)这是一种不依赖语言或语言环境的安全格式

答案 4 :(得分:0)

Java的SimpleDateFormat做得很好。是的我知道,这不是自动的,但为什么会这样?猜测确切的值总是不好的做法IMO。