如何在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
相关产品推荐
相关产品推荐

