From 46db92cc6b106090fce408fc5fb87697b5c36745 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Pant=C5=AF=C4=8Dek?= Date: Thu, 11 May 2023 10:02:34 +0200 Subject: [PATCH] Parsing and formatting days. --- src/cal-day.scm | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/src/cal-day.scm b/src/cal-day.scm index 6a504c9..bc6894d 100644 --- a/src/cal-day.scm +++ b/src/cal-day.scm @@ -43,6 +43,8 @@ (import scheme (chicken base) + (chicken format) + (chicken string) util-tag cal-month testing) @@ -113,6 +115,27 @@ (cal-month-add M 1) M))) + ;; Converts day to ISO date string + (define (cal-day->string v) + (let ((y (cal-day-year v)) + (m (cal-day-month v)) + (d (cal-day-day v))) + (format "~A-~A-~A" + y + (if (> m 9) + m + (format "0~A" m)) + (if (> d 9) + d + (format "0~A" d))))) + + ;; Converts ISO date string to cal-day + (define (string->cal-day s) + (let ((l (string-split s "-"))) + (if (= (length l) 3) + (apply make-cal-day (map string->number l)) + #f))) + ;; Module self-tests (define (cal-day-tests!) (run-tests @@ -142,7 +165,13 @@ (test-false cal-day? (cal-day? (make-cal-day 2023 2 29))) (test-true cal-day? - (cal-day? (make-cal-day 2024 2 29))) + (cal-day? (make-cal-day 2024 2 29))) + (test-equal? cal-day->string + (cal-day->string (make-cal-day 2024 2 29)) + "2024-02-29") + (test-equal? string->cal-day + (string->cal-day "2023-05-11") + (make-cal-day 2023 5 11)) )) )