Version: 0.3
rfc3339: RFC3339 Date and Time Format in Scheme
Neil Van Dyke
License: LGPL 3 Web: http://www.neilvandyke.org/rfc3339-scheme/
(require (planet neil/rfc3339:1:1)) |
1 Introduction
The rfc3339 package implements parsing, formatting, and simple validation of RFC3339 date and time format, which is a subset of ISO 8601, intended for use in Internet protocols.
Note that full Scheme support of ISO 8601 and various time-related computation is a very different project of the author, and not at all the intention of rfc3339.
rfc3339 requires R5RS, SRFI-6, SRFI-9, and two particular regular expression functions. Note that the regular expression functions in Pregexp 1e9 will not work, but are expected to work in subsequent versions of Pregexp. Thus far, rfc3339 has only been tested under PLT Scheme.
2 Record Type
rfc3339-record is an abstract data type for the information in an RFC3339 format time and date. (“rfc3339-string” is used in identifiers to denote the RFC3339 format as a Scheme string.)
|
year : any/c |
month : any/c |
mday : any/c |
hour : any/c |
minute : any/c |
second : any/c |
secfrac : any/c |
offsetmin : any/c |
Construct an rfc3339-record with the given field values. Each of year, month, mday, hour, minute, and second is #f or a nonnegative integer. secfrac is #f or a real number that is greater than or equal to 0.0 and less than 1.0. offsetmin is #f or a nonnegative integer. Note that offsetmin represents both the hour and minute components of an RFC3339 string.
Predicate for rfc3339-record.
Get the respective field value of rfc3339-record rec.
Set the respective field value of rfc3339-record rec to val.
Yields a list of the rfc3339-record rec fields, corresponding to the arguments of the make-rfc3339-record procedure.
3 Parsing
The parsing procedures are for constructing a rfc3339-records, lists, and vectors from RFC3339 strings. The underlying parser can also apply a user-supplied closure directly.
Parses RFC3339 string str and applies procedure constructor with the parsed values. The arguments of constructor are the same as those of make-rfc3339-record.
Yields an rfc3339-record from RFC3339 string str.
Yields a list or vector (respectively) from the parsed values of RFC3339 string str. The list and vector elements correspond to the arguments of make-rfc3339-record.
4 Formatting
An RFC3339 string format can be obtained from an rfc3339-record.
(write-rfc3339 rec port) → any/c |
rec : any/c |
port : any/c |
Write an RFC3339 string format of rfc3339-record rec to output port port.
Yield an RFC3339 string format of rfc3339-record rec as a Scheme string.
5 Validation
A few procedures are provided for validating rfc3339-records.
Check the respective component of rfc3339-record rec for completeness and correctness, yielding #f iff no problems were detected. If explain? is true, then true values of these procedures are lists that “explain” the error detected. For example:
Leap years are calculated correctly. Leap seconds (61st seconds in minutes) are tolerated in any date and time.
Checks all three components. See check-rfc3339-record-date et al.
Yields a true value iff check-rfc3339-record-full yields a false value.
6 SRFI-19 Interoperability
rfc3339 has no dependency on SRFI-19, but a procedure is provided for constructing a SRFI-19 date.
|
str : any/c |
make-date : any/c |
Contruct a SRFI-19 date from an RFC3339 string, where str is the string, and make-date is the SRFI-19 date constructor. Applications using SRFI-19 may wish to define an rfc3339-string->date procedure:
7 History
Version 0.3 – 2009-03-03 – PLaneT (1 1)
License is now LGPL 3. Converted to author’s new Scheme adminsitration system. Changes for PLT 4.x.
Version 0.2 – 2005-12-05 – PLaneT (1 0)
Release for PLT 299/3xx. Changed portability note in light of Pregexp post-1e9 bug fix. Minor documentation changes.
Version 0.1 – 2005-01-30
Initial release.
8 Legal
Copyright (c) 2005–2009 Neil Van Dyke. This program is Free Software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License (LGPL 3), 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 http://www.gnu.org/licenses/ for details. For other licenses and consulting, please contact the author.