jd-time-utils is a Common Lisp library for computing time and parsing time strings outside the Lisp UT range of 1900-01-01 onward, using Julian Days internally.

The purpose was initially to allow transparent date parsing into structures from scraped data; then it was extended because dates before 1900 were not parsed.

It uses Julian Days, with 4613 BCE at time zero, as the basis for internal computations, and performs parsing using an included modified version of cl-date-time-parser, switching from Gregorian to Julian calendar (ie, no leap years) on Oct 15, 1582.

It allows negative Julian Days, and negative lisp UT, so it should work over a billion years or so.

It is available under an MIT license.

It can be obtained from the jd-time-utils github repository at https://github.com/jetmonk/jd-time-utils.


CL>  (jd-time-utils::build-date-time-struct-from-ut 
          -1 ;; one second before Lisp era
	  :timezone 10)
      :year 1899
      :month 12
      :day 31
      :hour 13   
      :minute 59
      :second 59
      :fractional-second 0.0d0
      :day-of-week 6
      :ut -1 
      :timezone 10 ;; new output timezone (10 zones west of meridian)
      :float-year 1899.9999999682902d0
      :julian-time #S(jd-time-utils:julian-time
                      :day 2415020
                      :second 86399
                      :nanosecond 0))

;; --------------------------------------------------------------------------------------------
CL>  (jd-time-utils:parse-date-time-string
	  "5:42:00.1 July 4, 1976 EST" :output-timezone 5)
     :year 1976
     :month 7
     :day 4
     :hour 5
     :minute 42
     :second 0
     :fractional-second 0.1d0
     :day-of-week 6
     :ut 2414313720
     :timezone 5
     :float-year 1976.506682604736d0
     :julian-time #S(jd-time-utils:julian-time
                           :day 2442964
                           :second 38520
                           :nanosecond 100000000))