Duration processing library built on top of local-time.
Switch branches/tags
Nothing to show
Clone or download



This is a simple library that provides a duration class, and some useful accompanying operations. It is built on and requires the local-time library.

Assumptions and limitations

Durations describe a length of time—e.g., "4 days" or "5 hours and 29 minutes"—without reference to a particular start or end time. Unlike the time-interval library, local-time-duration makes no attempt to deal with variable-length units. In particular, durations may neither be specified nor represented in terms of years or months. Also, since durations do not represent a specific interval of time with a specific start or end time, there is no attempt when working exclusively with durations to handle leap seconds, timezone or daylight savings time changes, etc. However, when adding or removing a duration to or from a local-time timestamp, the local-time library will correctly handle timezone/DST.


LTD> (duration :day 1 :minute 75)
#<DURATION [1/4500/0] 1 day 1 hour 15 minutes>

LTD> (duration= (duration :day 1) (duration :hour 24))

LTD> (duration+ (duration :hour 1) (duration :hour 23))
#<DURATION [1/0/0] 1 day>

A duration can be expressed in any arbitrary unit (the second value is the remainder of the duration that cannot be expressed in whole units):

LTD> (duration-as (duration :day 1 :hour 4 :minute 25) :hour)
#<DURATION [0/1500/0] 25 minutes>

local-time-duration also provides functions for working with local-time timestamps in conjunction with durations:

LTD> (timestamp-difference @2014-01-01T09:00:00 @2014-01-01T06:00:00)
#<DURATION [0/10800/0] 3 hours>