(define-module (datetime) :export (date? year month day hour minute second time? datetime?) ;; To resolve colision with cadr-second from srfi-1 :replace (second) :use-module (srfi srfi-1) :use-module (srfi srfi-9) :use-module (srfi srfi-9 gnu) :use-module (util) :use-module (srfi srfi-41) :use-module (srfi srfi-41 util) :use-module (ice-9 i18n) :use-module (ice-9 format) :use-module (util config) :re-export (locale-month) ) ;;; Enums (define-many define-public (jan january ) 1 (feb february ) 2 (mar mars ) 3 (apr april ) 4 (may ) 5 (jun june ) 6 (jul july ) 7 (aug august ) 8 (sep september ) 9 (oct october ) 10 (nov november ) 11 (dec december ) 12) (define-many define-public (sun) 0 (mon) 1 (tue) 2 (wed) 3 (thu) 4 (fri) 5 (sat) 6) ;;; Configuration (define-public week-start (make-parameter sun)) (define-config week-start sun description: "First day of week" pre: (ensure (lambda (x) (<= sun x sat))) post: week-start) ;;; RECORD TYPES ;;; DATE (define-immutable-record-type (make-date year month day) date? (year year) (month month) (day day)) (define*-public (date key: (year 0) (month 0) (day 0)) (make-date year month day)) (set-record-type-printer! (lambda (r p) (catch 'misc-error (lambda () (display (date->string r "#~Y-~m-~d") p)) (lambda (err _ fmt args . rest) (format p "BAD~s-~s-~s" (year r) (month r) (day r)))))) ;;; TIME (define-immutable-record-type