iso8601

ISO 8601 (and European civil calendar) compliant library of date and time (clock) related predicates. That is, an ISO 8601 handler.

The library supports date and time-of-day representations plus ISO 8601 duration and interval string conversions using time_string/3, date_time_string/3, duration_string/2, and interval_string/2.

Supported time-of-day strings include basic and extended forms with the required T prefix, e.g. T143000, T14:30:00, T143000.125, T14:30:00.125, T143000,125, and T14:30:00,125.

Supported combined date-time strings include calendar-date, ordinal-date, and complete week-date basic and extended forms with optional UTC Z or numeric offsets, using either . or , as fractional separator, e.g. 20260407T143000, 2026-04-07T14:30:00, 2026097T143000Z, 2026-097T14:30:00+05:45, 2026W152T143000Z, 2026-W15-2T14:30:00+05:45, 20260407T143000.125+0545, and 2026-04-07T14:30:00,125Z.

Normalized term shapes are:

  • time(Hours,Minutes,Seconds) for time-of-day strings

  • date_time(Year,Month,Day,Hours,Minutes,Seconds) for local date-time strings

  • date_time(Year,Month,Day,Hours,Minutes,Seconds,OffsetSeconds) for UTC or offset date-time strings, using an offset in seconds from UTC

An ISO 8601 duration string represents a time amount (e.g. P3D for three days or P1Y2M3DT4H5M6S for a mixed date/time duration).

An ISO 8601 interval string represents a time interval using two parts separated by /, where each part can be a date, a date-time, or a duration (e.g. 2026-02-25/2026-03-01, 2026-04-07T14:30:00Z/2026-04-07T15:00:00Z, 2026-097T14:30:00Z/2026-097T15:00:00Z, 2026-W15-2T14:30:00Z/PT30M, or 2026-02-25/P3D).

Author: Daniel L. Dudley Created: 2004-02-18

Modified: 2014-09-26 (to use the os library object to get the current date)
Modified: 2026-02-25 (to add duration_string/2 and interval_string/2 predicates) Modified: 2026-04-07 (to add time_string/3 and date_time_string/3 predicates and extend interval_string/2, including ordinal-date and week-date date-time forms) Modified: 2026-04-08 (to add support for comma as fractional separator in time_string/3 and date_time_string/3 and for corresponding interval parsing)

API documentation

Open the ../../apis/library_index.html#iso8601 link in a web browser.

Loading

To load all entities in this library, load the loader.lgt file:

| ?- logtalk_load(iso8601(loader)).

Testing

To test this library predicates, load the tester.lgt file:

| ?- logtalk_load(iso8601(tester)).