提问人:jsparkes 提问时间:10/9/2023 最后编辑:Rainer Joswigjsparkes 更新时间:10/10/2023 访问量:48
在Common Lisp中格式化包括GMT偏移量的时间戳?
Format a timestamp including GMT offset in common lisp?
问:
使用带有“本地时间”包的 common lisp,我正在尝试格式化包含 GMT 偏移量的时间戳。该文档包含一个“:gmt-offset”格式参数,但使用它会生成错误。我查看了 github 上的源代码,case 语句似乎包括 :gmt-offset。我做错了什么吗?我是否获得了没有 gmt-offset 的旧版本的本地时间?
(ql:quickload "local-time")
(local-time:format-timestring nil (local-time:now) :format
'((:year 4) #\.
(:month 2) #\.
(:day 2) #\.
(:hour 2) #\.
(:min 2) #\.
(:sec 2) #\.
(:msec 3) #\-
(:gmt-offset)))
在 SBCL 2.3.4 中加载它给了我:
debugger invoked on a SB-KERNEL:CASE-FAILURE @225F39AB in thread #<THREAD "main thread" RUNNING {10044C00A3}>: :GMT-OFFSET fell through ECASE expression. Wanted one of (:NSEC :USEC :MSEC :SEC :MIN :HOUR :HOUR12 :DAY :WEEKDAY :MONTH :YEAR :ISO-WEEK-YEAR ...).
Type HELP for debugger help, or (SB-EXT:EXIT) to exit from SBCL.
restarts (invokable by number or by possibly-abbreviated name):
0: [ABORT] Exit debugger, returning to top level.
(LOCAL-TIME::%CONSTRUCT-TIMESTRING #<unavailable argument> #<unavailable argument> #<unavailable argument>)
source: (ECASE (IF (CONSP FMT) (CAR FMT) FMT) (:NSEC NSEC) (:USEC (FLOOR NSEC 1000)) (:MSEC (FLOOR NSEC 1000000)) (:SEC SEC) (:MIN MINUTE) (:HOUR HOUR) (:HOUR12 (1+ (MOD (1- HOUR) 12))) (:DAY DAY) (:WEEKDAY WEEKDAY) (:MONTH MONTH) ...)
答:
1赞
jsparkes
10/9/2023
#1
我找到了答案。我只需要删除:gmt-offset周围的括号。我猜它不支持那里的填充参数。这是一个一致性问题,以及一个文档问题,也许应该有一个例子。
我会把它留在这里,以防其他人遇到这种情况。
正确的格式是:
(ql:quickload "local-time")
(local-time:format-timestring nil (local-time:now) :format
'((:year 4) #\.
(:month 2) #\.
(:day 2) #\.
(:hour 2) #\.
(:min 2) #\.
(:sec 2) #\.
(:msec 3) #\-
:gmt-offset
))
评论
3赞
ad absurdum
10/9/2023
文档非常清楚:标有 * 的元素可以以 (:keyword padding &optional (padchar #\0))
的形式放在列表中,并且是十几个没有如此标记的元素之一。:gmt-offset
评论