nibbles.rkt
#lang racket/base

(require srfi/19)

(define nps 10000)

(define (current) (encode-time (current-time)))

(define (encode d) (encode-time (date->time-utc d)))

(define (encode-time t)
   (floor (* nps (+ (/ (time-nanosecond t) 10000000) (time-second t)))))

(define (decode n)
   (define-values (q r) (quotient/remainder n nps))
   (let ((t (make-time 'time-utc (* (/ r nps) 10000000) q)))
     (time-utc->date t 0)))

(provide current encode decode nps)