cl-date-time-parser

2014-07-13

Parse date-time-string, and return (values universal-time fraction). Parsable date-time-format: ISO8601, W3CDTF, RFC3339, RFC822, RFC2822, RFC5322, asctime, RFC850, RFC1036.

Upstream URL

github.com/tkych/cl-date-time-parser

Author

Takaya OCHIAI <tkych.repl@gmail.com>

License

MIT License
README

Last modified: 2014-05-18 14:39:27 tkych

version 0.1.03 (beta)

CL-Date-Time-Parser

In general, an implementation should be conservative in its sending behavior, and liberal in its receiving behavior. RFC791: Internet Protocol

There are a lot of formats to specify the date and time on the Web. For example:

  • "Thu, 23 Jul 2013 19:42:23 GMT" (RFC1123),
  • "Thu Jul 23 19:42:23 2013" (asctime),
  • "Thursday, 23-Jul-13 19:42:23 GMT" (RFC1036),
  • "2013-07-23T19:42:23Z" (RFC3339),
  • "20130723T194223Z" (ISO8601:2004), etc.

The goal of cl-date-time-parser is to hide the difference between date-time formats, and enable to manage date and time as the one date-time format (Universal Time).

Function parse-date-time parses date-time-string, and return universal-time and fraction. Parsable date-time formats are:

  • RFC822 (RFC1123, RFC2822, RFC5322),
  • asctime,
  • RFC850 (RFC1036),
  • ISO8601 (1988, 2000, 2004, except for no-year format), W3CDTF (subset of ISO 8601),
  • RFC3339.

In addition, parse-date-time can liberally parse the above formats with little broken.

Depends-on

Installation

cl-test-grid results:

Auto:
  1. CL-REPL> (ql:quickload :cl-date-time-parser)
Manual:
  1. SHELL$ git clone https://github.com/tkych/cl-date-time-parser
  2. CL-REPL> (push #p"/path-to-cl-date-time-parser/cl-date-time-parser/" asdf:*central-registry*)
  3. CL-REPL> (ql:quickload :cl-date-time-parser) or (asdf:load-system :cl-date-time-parser)

Examples

(parse-date-time "Thu, 23 Jul 2013 19:42:23 GMT") ;RFC 1123
=> 3583597343, 0

(parse-date-time "Thu Jul 23 19:42:23 2013") ;asctime
=> 3583597343, 0

(parse-date-time "Thursday, 23-Jul-13 19:42:23 GMT") ;RFC 1036
=> 3583597343, 0

(parse-date-time "2013-07-23T19:42:23Z") ;RFC 3339
=> 3583597343, 0

(parse-date-time "20130723T194223Z") ;ISO 8601
=> 3583597343, 0

(parse-date-time "Thu, 23 Jul 2013 19:42:23 JST")
=> 3583564943, 0

(parse-date-time "2013-07-23T19:42:23+09:00")
=> 3583564943, 0

(parse-date-time "23 Jul 13 19:42:23 +0900")
=> 3583564943, 0

(parse-date-time "Thu Jul 23 19:42:23 JST 2013")
=> 3583564943, 0

(parse-date-time "2013-07-23T19:42:23.45Z")
=> 3583597343, 0.45

(parse-date-time "2013-01-01")
=> 3565987200, 0

(parse-date-time "2013")
=> 3565987200, 0

(parse-date-time "1 Jan 13")
=> 3565987200, 0

(parse-date-time "2003-12-31T25:14:55Z") ;broken hours
=> 3281908495, 0
(parse-date-time "2004-01-01T01:14:55Z")
=> 3281908495, 0

(parse-date-time "2003-12-31T10:61:55Z") ;broken minuits
=> 3281857315, 0
(parse-date-time "2003-12-31T11:01:55Z")
=> 3281857315, 0

(parse-date-time "2003-12-31T10:14:61Z") ;broken seconds
=> 3281854501, 0
(parse-date-time "2003-12-31T10:15:01Z")
=> 3281854501, 0

(parse-date-time ";3-12-31T10:15:01Z") ;broken two-digit-years c.f. rfc3339, 3.
=> 3597473701, 0
(parse-date-time "2013-12-31T10:15:01Z")
=> 3597473701, 0

For further examples, please see Eval-Test in date-time-parser.lisp

Manual

[Function] PARSE-DATE-TIME date-time-string => universal-time, fraction

Parse date-time-string, and return universal-time and fraction. date-time-string must represent the date-time after 1900-01-01T00:00:00Z.

Parsable Formats:

  • RFC822 Genus: RFC822, RFC1123, RFC2822, RFC5322, asctime, RFC850 (RFC1036).
  • ISO8601 Genus: ISO8601(:1988, :2000 and :2004. except for no-year format), W3CDTF, RFC3339.
  • Broken format: The above formats with little broken.

Reference

Author, License, Copyright

Dependencies (6)

  • alexandria
  • anaphora
  • cl-ppcre
  • local-time
  • parse-float
  • split-sequence

Dependents (1)

  • GitHub
  • Quicklisp