日期和时间在Emacs Lisp中的应用

5
我知道emacs lisp非常擅长处理日期和时间,但它是否有函数可以将字符串转换为内部表示的整数,使用类似于%Y,%m,%d,%H,%M,%S等格式?此外,在emacs参考手册中,它说时间是由两个或三个整数组成的列表,但是否有更正式的规范或描述?感谢。 编辑:谢谢回答 - 但我想知道是否有一个函数可以反向执行format-time-string(类似于parse-time-string,但具有输入字符串的结构规范)? 编辑2:我想答案是没有内置的东西...但是已经在这里实现了部分功能。

我刚试了一下strptime.el,它甚至不能在文件中给出的“手动测试”示例中工作;显然replace-in-string在emacs中已经不再可用。太糟糕了,我正在寻找相同的功能。 - Liam
如果您创建一个别名 (defalias 'replace-in-string 'replace-regex-in-string),它是否有效? - hatmatrix
3个回答

3
(defun encode-time-string (string)
  (apply #'encode-time (parse-time-string string)))

内部表示可能会发生变化;我认为最好使用提供的文档API(encode-time、decode-time等)来访问它。


2
大多数与时间相关的函数返回一个由三个整数组成的列表。第一个整数包含秒的最高16位,而第二个整数包含最低的16位。第三个整数表示微秒计数。
在没有提供精度高于一秒的系统上,微秒计数为零。
至于你问题的其余部分,请查看手册中的此部分,以防你错过了它。

0
如果您需要解析一个没有时间的日期,比如“2022年7月7日”,那么parse-time将返回前3个值的nil。为了避免出现Wrong type argument: fixnump, nil,应该对这种可能性进行检查:
(defun encode-time-string (string)
  (let* ((dt (parse-time-string string))
     (dtt (if (car dt)
          dt
        (append '(0 0 0) (nthcdr 3 dt))))
     )
    (apply #'encode-time dtt)))

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