about summary refs log tree commit diff
path: root/lisp
diff options
context:
space:
mode:
authorsterni <sternenseemann@systemli.org>2021-01-19T13·43+0100
committersterni <sternenseemann@systemli.org>2021-01-25T20·09+0000
commit71946b84b8a9ffba3a9fa627f34e5dbabec50b4b (patch)
tree29c3eb8b838a1d1bc14ac45d3521faecee71c653 /lisp
parentcf4357d9b7a0ce2e885bd7e4d11412c92517d19b (diff)
feat(klatre): support offsets in format-dottime r/2142
Instead of bothering with local-time's feature rich timezone support we
just pass the offset as an integer and render it ourselves.

Change-Id: I1df2d02153e3ef21ae3b2871ad6ef57d0f6eff86
Reviewed-on: https://cl.tvl.fyi/c/depot/+/2423
Tested-by: BuildkiteCI
Reviewed-by: tazjin <mail@tazj.in>
Reviewed-by: glittershark <grfn@gws.fyi>
Diffstat (limited to 'lisp')
-rw-r--r--lisp/klatre/klatre.lisp19
1 files changed, 12 insertions, 7 deletions
diff --git a/lisp/klatre/klatre.lisp b/lisp/klatre/klatre.lisp
index 1c8d4c4d2e..e10ddeea4e 100644
--- a/lisp/klatre/klatre.lisp
+++ b/lisp/klatre/klatre.lisp
@@ -76,18 +76,23 @@ separated by SEP."
 (defparameter dottime-format
   '((:year 4) #\- (:month 2) #\- (:day 2)
     #\T
-    (:hour 2) #\· (:min 2) "+00") ; TODO(grfn): Allow passing offset
+    (:hour 2) #\· (:min 2))
   "`:LOCAL-TIME' format specifier for dottime")
 
-(defun format-dottime (timestamp)
-  "Return TIMESTAMP formatted as dottime, using a +00 offset"
+(defun format-dottime (timestamp &optional (offset 0))
+  "Return TIMESTAMP formatted as dottime, with a specified offset or +00"
   (check-type timestamp local-time:timestamp)
-  (local-time:format-timestring nil timestamp
-                                :format dottime-format
-                                :timezone local-time:+utc-zone+))
+  (concatenate 'string
+    (local-time:format-timestring nil timestamp
+                                  :format dottime-format
+                                  :timezone local-time:+utc-zone+)
+    ; render sign manually since format prints it after padding
+    (if (>= offset 0) "+" "-")
+    (format nil "~2,'0D" (abs offset))))
 
 (comment
- (format-dottime (local-time:now)))
+ (format-dottime (local-time:now))
+ (format-dottime (local-time:now) 2))
 
 (defun try-parse-integer (str)
   "Attempt to parse STR as an integer, returning nil if it is invalid."