The internet-timestamp library contains a procedure for parsing of Internet timestamps RFC 3339. It is intended to conform closely to the ABNF grammar in the RFC.
See also rfc3339.
Timestamp record type
(define-record-type ts (make-ts date time offset) ;; constructor ts? ;; predicate (date ts-date ) ;; accessors (time ts-time ) (offset ts-offset ) )
The internet-timestamp library also defines a record printer for the above record type, which prints timestamp entries in the format specified by the RFC.
The parsing procedures of this library are provided as fields of the <InetTimestamp> typeclass. Please see the typeclass library for information on type classes.
The <InetTimestamp> typeclass is intended to provide abstraction over different kinds of input sequences, e.g. character lists, strings, streams, etc. <InetTimestamp> inherits from <CoreABNF>, which provides the core parsing primitives used to build the timestamp parser (see the abnf library for more information).
The following example illustrates the creation of an instance of <InetTimestamp> specialized for character lists.
(require-extension typeclass internet-timestamp) (require-library abnf) (import (only abnf <CoreABNF> CharLex->CoreABNF <Input> <Token> <CharLex> Input->Token Token->CharLex make-<Input> )) (define char-list-<Input> (make-<Input> null? car cdr)) (define char-list-<Token> (Input->Token char-list-<Input>)) (define char-list-<CharLex> (Token->CharLex char-list-<Token>)) (define char-list-<CoreABNF> (CharLex->CoreABNF char-list-<CharLex>)) (define char-list-<InetTimestamp> (CoreABNF->InetTimestamp char-list-<CoreABNF> )) (define parser (parser char-list-<InetTimestamp>))[procedure] (parser <InetTimestamp) => (LAMBDA TEXT) => TS
Once applied to an instance of the InetTimestamp typeclass, parser returns a procedure that parses Internet timestamp text and returns a record of type ts.
Formatting procedures[procedure] (ts->list TS) => LIST
Returns an alist representation of a timestamp:
((date (YEAR MONTH DAY)) (time (HOUR MINUTE SECOND FRAC)) (offset (OFFSET)))
- 3.1 Compatibility with improved CharLex->CoreABNF constructor
- 3.0 Compatibility with abnf 5
- 2.0 Implemented typeclass interface
- 1.0 Initial Release
Copyright 2009-2011 Ivan Raikov.
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
A full copy of the GPL license can be found at <http://www.gnu.org/licenses/>.