在Common Lisp中解析日期的包?

时间:2011-05-02 07:12:02

标签: common-lisp

我在Common Lisp(SBCL)中编写了一个简单的Web scraper作为学习练习,&想按日期排序。为此,我需要将“MM / DD / YYYY”格式的日期解析为通用时间。

我可以简单地将字符串标记为&将这些位传递给encode-universal-time,但我认为必须有一个用于日期解析的内置函数(或流行的第三方软件包)。我非常感谢有人推荐一个: - )

6 个答案:

答案 0 :(得分:5)

这个答案很晚,但local-time库很有特色并且被广泛使用。它基于文章The long painful history of time

supports

  1. 时间和日期算术
  2. ISO 8601字符串格式化输出和解析
  3. 读取器宏直接在代码中嵌入时间串
  4. 时区处理(将读取unix tzfile格式)
  5. 通用和非时间时期之间的转换
  6. 朱利安日期计算

答案 1 :(得分:3)

您可以尝试使用PARSE-TIME net-telent-date,我认为这会做您想做的事。

同样Common Lisp Directory有一个库列表,其中有几个声称处理日期。

答案 2 :(得分:2)

有关Common Lisp的信息,请参阅net-telent-datesimple-date-time库。前者有一个parse-time函数可以使用(参见parse-time.lisp)。两者都包含在QuickLisp库集合中。

答案 3 :(得分:1)

许多实现都有UNIX接口,在相同的情况下,这包括strptime函数。

答案 4 :(得分:1)

Antik处理日期和时间,包括日期/时间解析器。结果是一个“时间点”,默认情况下是UTC(CL的“通用时间”是不同的,但它可以转换为它。)

答案 5 :(得分:0)

我使用本地时间和cl-date-time-parser

(local-time:parse-timestring "2019-11-13T18:09:06.313650+01:00")  ;; OK
(local-time:parse-timestring "2019-11-13") ;;OK

默认情况下失败:

(local-time:parse-timestring "2019/11/13")

但是我们可以将日期分隔符设置为“ /”:

(local-time:parse-timestring "2019/11/13" :date-separator #\/) ;; OK

还有时间和日期时间分隔符。

现在,像““ Wed Nov 13 18:13:15 2019”这样的格式将失败。我们将使用 cl-date-time-parser库:

(cl-date-time-parser:parse-date-time "Wed Nov 13 18:13:15 2019")
;; 3782657595
;; 0

它返回世界通用时间,然后我们可以使用 本地时间库:

(local-time:universal-to-timestamp *)
;; @2019-11-13T19:13:15.000000+01:00