You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Emacs(Elisp)中将Unix时间戳解析为日期对象

在Emacs Lisp中解析Unix时间戳为日期对象/格式化字符串

嘿,我来帮你搞定这个问题!在Elisp里处理Unix时间戳其实不用找外部资源,内置函数就完全能解决。你要的把1525505457转换成指定格式的日期,或者拿到对应的日期对象,其实两步就能完成:

1. 把Unix时间戳转换成Emacs时间对象

Unix时间戳是从1970年开始累计的秒数,Emacs有专门的seconds-to-time函数,能直接把它转换成内部认可的时间对象:

(setq target-timestamp 1525505457)
(setq emacs-time-object (seconds-to-time target-timestamp))
;; 得到的emacs-time-object是 (1525505457 0),这就是Emacs的标准时间对象格式

2. 解析时间对象或格式化为目标字符串

如果你需要拆分后的日期各部分(比如年、月、日、时分秒等),可以用decode-time函数获取结构化的时间数据:

(decode-time emacs-time-object)
;; 返回值示例:(57 30 15 5 5 2018 6 125 t 28800)
;; 依次对应:秒、分、时、日、月、年、星期(0=周日,6=周六)、年中天数、夏令时标志、时区偏移(秒)

如果要得到你指定的格式Sat May 05 2018 15:30:57 GMT+0800 (CST),直接用format-time-string就行,它支持丰富的格式占位符:

(format-time-string "%a %b %d %Y %T GMT%z (%Z)" emacs-time-object)
;; 运行后会直接返回你想要的结果:"Sat May 05 2018 15:30:57 GMT+0800 (CST)"

关键格式占位符说明

这里简单拆解一下用到的几个占位符:

  • %a:缩写的星期名称(比如Sat)
  • %b:缩写的月份名称(比如May)
  • %d:两位数字的日期(自动补零,比如05)
  • %Y:四位数字的年份(比如2018)
  • %T:时分秒的组合格式(HH:MM:SS,比如15:30:57)
  • %z:时区的偏移量(比如+0800)
  • %Z:时区的名称(比如CST)

这样不管是要时间对象还是格式化后的字符串,都能轻松搞定啦!

内容的提问来源于stack exchange,提问作者Jiacai Liu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:24:35