(Arne Babenhauserheide)
2015-06-22: newbase60: add decoding of datetime newbase60: add decoding of datetime
diff --git a/examples/newbase60.w b/examples/newbase60.w
--- a/examples/newbase60.w
+++ b/examples/newbase60.w
@@ -59,6 +59,20 @@ define : date->sxg year month day hour m
map integer->sxg
list hour minute second
+define : sxg->date str
+ . "Convert a new base 60 date into a list:
+ YYMD-hms -> (year month day hour minute second)
+ "
+ let*
+ : centeridx : string-rindex str #\- ; rindex because the year could be negative
+ year : substring/read-only str 0 : - centeridx 2
+ month : string : string-ref str : - centeridx 2
+ day : string : string-ref str : - centeridx 1
+ hour : string : string-ref str : + centeridx 1
+ minute : string : string-ref str : + centeridx 2
+ second : string : string-ref str : + centeridx 3
+ map sxg->integer
+ list year month day hour minute second
define : main args
cond
@@ -69,6 +83,8 @@ define : main args
: and (= 2 (length args)) : equal? "--datetime" : list-ref args 1
let : : tm : localtime : current-time
format #t "~A\n" : apply date->sxg : list (+ 1900 (tm:year tm)) (+ 1 (tm:mon tm)) (tm:mday tm) (tm:hour tm) (tm:min tm) (tm:sec tm)
+ : and (= 3 (length args)) : equal? "--decode-datetime" : list-ref args 1
+ format #t "~A\n" : sxg->date : list-ref args 2
: and (= 3 (length args)) : equal? "-d" : list-ref args 1
format #t "~A\n" : sxg->integer : list-ref args 2
: = 2 : length args