我在Common Lisp(SBCL)中编写了一个简单的Web scraper作为学习练习,&想按日期排序。为此,我需要将“MM / DD / YYYY”格式的日期解析为通用时间。
我可以简单地将字符串标记为&将这些位传递给encode-universal-time
,但我认为必须有一个用于日期解析的内置函数(或流行的第三方软件包)。我非常感谢有人推荐一个: - )
答案 0 :(得分:5)
这个答案很晚,但local-time库很有特色并且被广泛使用。它基于文章The long painful history of time。
答案 1 :(得分:3)
您可以尝试使用PARSE-TIME
net-telent-date,我认为这会做您想做的事。
同样Common Lisp Directory有一个库列表,其中有几个声称处理日期。
答案 2 :(得分:2)
有关Common Lisp的信息,请参阅net-telent-date和simple-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