Skip to content

tkych/cl-date-time-parser

master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
 
 

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

About

Parse date-time-string, liberally.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published