blob: c0a7fd5e79f1d8da8e7c17ede64524c237e18c15 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
(define-module (srfi srfi-19 util)
#:use-module (srfi srfi-9 gnu)
#:use-module (srfi srfi-19)
#:use-module (srfi srfi-19 setters)
#:export (copy-date
drop-time! drop-time
today?
;; seconds minutes hours days weeks
;; time-add
make-duration
time->string))
#;
(define (copy-date date)
"Returns a copy of the given date structure"
(let* ((date-type (@@ (srfi srfi-19) date))
(access (lambda (field) ((record-accessor date-type field) date))))
(apply make-date (map access (record-type-fields date-type)))))
(define (drop-time! date)
"Sets the hour, minute, second and nanosecond attribute of date to 0."
(set! (hour date) 0)
(set! (minute date) 0)
(set! (second date) 0)
(set! (nanosecond date) 0)
date)
(define (drop-time date)
"Returns a copy of date; with the hour, minute, second and nanosecond
attribute set to 0. Can also be seen as \"Start of day\""
(set-fields date
((date-hour) 0)
((date-minute) 0)
((date-second) 0)
((date-nanosecond) 0)))
(define (make-duration s)
(make-time time-duration 0 s))
(define (today? time)
(let* ((now (date->time-utc (drop-time (current-date))))
(then (add-duration now (make-duration (* 60 60 24)))))
(and (time<=? now time)
(time<=? time then))))
(define* (time->string time #:optional (format "~c"))
(date->string (time-utc->date time) format))
|