aboutsummaryrefslogtreecommitdiff
path: root/module/datetime
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--module/datetime.scm25
-rw-r--r--module/datetime/util.scm39
2 files changed, 51 insertions, 13 deletions
diff --git a/module/datetime.scm b/module/datetime.scm
index 2b330a9c..9b0ccd47 100644
--- a/module/datetime.scm
+++ b/module/datetime.scm
@@ -142,8 +142,8 @@
;; timezone info it's discarded and a local timestamp produced.
;; It's deprecated since the local time of a datetime can be in another date
;; than the original. which is fun...
-(define-public (get-time dt)
- (get-time% (get-datetime dt)))
+;; (define-public (get-time dt)
+;; (get-time% (get-datetime dt)))
;;; UTIL
@@ -176,7 +176,7 @@
[else "Object not a date, time, or datetime object ~a" date/-time]))
(define-public (as-time date/-time)
- (cond [(datetime? date/-time) (get-time date/-time)]
+ (cond [(datetime? date/-time) (get-time% (get-datetime date/-time))]
[(date? date/-time) (time)]
[(time? date/-time) date/-time]
[else "Object not a date, time, or datetime object ~a" date/-time]))
@@ -207,8 +207,10 @@
(= (second a) (second b))))
(define-public (datetime= a b)
- (and (date= (get-date a) (get-date b))
- (time= (get-time a) (get-time b))))
+ (let ((a (get-datetime a))
+ (b (get-datetime b)))
+ (and (date= (get-date a) (get-date b))
+ (time= (get-time% a) (get-time% b)))))
(define-many define-public
(date=?) date=
@@ -530,12 +532,15 @@
;;; DATETIME
+;; NOTE that base is re-normalized, but change isn't. This is due to base
+;; hopefully being a real date, but change just being a difference.
(define-public (datetime+ base change)
- (let* ((time overflow (time+ (get-time base) (get-time change))))
- (datetime date: (date+ (get-date base)
- (get-date change)
- (date day: overflow))
- time: time)))
+ (let ((base (get-datetime base)))
+ (let* ((time overflow (time+ (get-time% base) (get-time% change))))
+ (datetime date: (date+ (get-date base)
+ (get-date change)
+ (date day: overflow))
+ time: time))))
;; (define (datetime->srfi-19-date date)
;; ((@ (srfi srfi-19) make-date)
diff --git a/module/datetime/util.scm b/module/datetime/util.scm
index ff75e86d..d5558aa2 100644
--- a/module/datetime/util.scm
+++ b/module/datetime/util.scm
@@ -150,7 +150,29 @@
#f
(string->list fmt)))))
-(define*-public (time->string time optional: (fmt "~H:~M:~S") key: allow-unknown?)
+;; (define*-public (time->string time optional: (fmt "~H:~M:~S") key: allow-unknown?)
+;; (with-output-to-string
+;; (lambda ()
+;; (fold (lambda (token state)
+;; (case state
+;; ((#\~)
+;; (case token
+;; ((#\~) (display "~"))
+;; ((#\H) (format #t "~2'0d" (hour time)))
+;; ((#\M) (format #t "~2'0d" (minute time)))
+;; ((#\S) (format #t "~2'0d" (second time)))
+;; ;; ((#\z) (when (utc? time) (display "Z")))
+;; (else (unless allow-unknown?
+;; (error 'time->string "Invalid format token ~a" token))))
+;; #f)
+;; (else (unless (char=? #\~ token) (display token)) token)))
+;; #f
+;; (string->list fmt)))))
+
+(define*-public (datetime->string datetime optional: (fmt "~Y-~m-~dT~H:~M:~S") key: allow-unknown?)
+ (define dt (get-datetime datetime))
+ (define date (get-date dt))
+ (define time ((@ (datetime) get-time%) dt))
(with-output-to-string
(lambda ()
(fold (lambda (token state)
@@ -161,9 +183,21 @@
((#\H) (format #t "~2'0d" (hour time)))
((#\M) (format #t "~2'0d" (minute time)))
((#\S) (format #t "~2'0d" (second time)))
+ ;; TODO
;; ((#\z) (when (utc? time) (display "Z")))
+ ((#\Y) (format #t "~4'0d" (year date)))
+ ((#\m) (format #t "~2'0d" (month date)))
+ ((#\d) (format #t "~2'0d" (day date)))
+ ;; Should be same as ~_d
+ ((#\e) (format #t "~2' d" (day date)))
+ ((#\1) (format #t "~4'0d-~2'0d-~2'0d"
+ (year date) (month date) (day date)))
+ ((#\a) (display (week-day-name (week-day date))))
+ ;; abriviated locale month name
+ ;; TODO locale
+ ((#\b) (display (month-name (month date))))
(else (unless allow-unknown?
- (error 'time->string "Invalid format token ~a" token))))
+ (error 'datetime->string "Invalid format token ~a" token))))
#f)
(else (unless (char=? #\~ token) (display token)) token)))
#f
@@ -171,7 +205,6 @@
-
;; @verbatim
;; A B C D E ¬F
;; |s1| : |s2| : |s1| : |s2| : : |s1|