diff options
author | Ekaitz Zarraga <ekaitz@elenq.tech> | 2025-10-07 15:15:58 +0200 |
---|---|---|
committer | Ekaitz Zarraga <ekaitz@elenq.tech> | 2025-10-07 15:15:58 +0200 |
commit | a1ed7b9f9954618e2ed4e14dd2dd3215ba7afd7d (patch) | |
tree | 5ce01882fb28f786ce6c362cb51d8809d641284c /ss/dates.scm | |
parent | 656bca99b0b4c7130855cb01b30b944d4dcb4d12 (diff) |
API: move `src` to `ss`
Diffstat (limited to 'ss/dates.scm')
-rw-r--r-- | ss/dates.scm | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/ss/dates.scm b/ss/dates.scm new file mode 100644 index 0000000..58a1ec6 --- /dev/null +++ b/ss/dates.scm @@ -0,0 +1,44 @@ +(define-module (ss dates) + #:use-module (ice-9 format) + #:use-module (srfi srfi-1) + #:use-module (srfi srfi-19) + #:export (string/ISO->date + date->string/RFC3339 + unix-date + newest + find-newest + date>?)) + +(define (string/ISO->date string) + (string->date string "~Y-~m-~d")) + +(define (date->string/RFC3339 date) + (call-with-output-string + (lambda (p) + (let* ((offset (abs (date-zone-offset date))) + (rem-h-seconds (modulo offset (* 60 60))) + (offset-hours (floor (/ (- offset rem-h-seconds) 60 60))) + (rem-m-seconds (modulo rem-h-seconds 60)) + (offset-minutes (floor (/ (- rem-h-seconds rem-m-seconds) 60)))) + (format + p + "~4,'0d-~2,'0d-~2,'0dT~2,'0d:~2,'0d:~2,'0d~:[Z~;~c~2,'0d:~2,'0d~]" + (date-year date) + (date-month date) + (date-day date) + (date-hour date) + (date-minute date) + (date-second date) + (not (= 0 (date-zone-offset date))) + (if (< 0 (date-zone-offset date)) #\+ #\-) + offset-hours + offset-minutes))))) + +(define unix-date (string/ISO->date "1970-01-01")) + +(define (newest a b) (if (time>? (date->time-utc a) (date->time-utc b)) a b)) + +(define (date>? a b) + (time>? (date->time-utc a) (date->time-utc b))) + +(define (find-newest dates) (reduce newest unix-date dates)) |