在Common Lisp中格式化当前系统日期

5
我正在尝试通过以下函数在Common Lisp中获取当前系统日期。
(defun current-date-string ()
  "Returns current date as a string."
  (multiple-value-bind (sec min hr day mon yr dow dst-p tz)
                       (get-decoded-time)
    (declare (ignore sec min hr dow dst-p tz))
    (format nil "~A-~A-~A" yr mon day)))

不幸的是我得到的当前日期格式是 "2014-1-2"。但实际上我需要的是这种格式 "2014-01-02"。有没有办法可以更改格式?我尝试用 yyyy-mm-dd 替换 nil 但没有成功。然而我的机器时钟显示的日期格式是 "2014-01-02"。

2个回答

9
你需要的是:

什么是必需品


(format nil "~4,'0d-~2,'0d-~2,'0d" yr mon day)

~2,'0d 的意思是:

  • d: 十进制输出(而不是通用的 a
  • 2: 第一个参数:宽度
  • '0: 第二个参数:填充字符 0

我建议您阅读有关格式化输出的内容; format 是一个非常强大的工具。


啊,我明白了。如果我用“_”作为未使用的变量,它将在SBCL中运行,但当然会产生警告,并且我认为这确实是“不整洁”的。我会把它去掉,因为我同意我更喜欢更符合习惯的方法。 - lurker


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接