emacs - ISO emacs/elisp 用于确定与一周的第一天/最后一天相对应的日期,例如ISO 8601 2013-WW47

标签 emacs elisp org-mode iso8601 datetime-parsing

我喜欢创建看起来像的标题

** WW47 (Monday November 18 - Sunday November 24, 2013)

我知道如何在 emacs/elisp 中使用 format-time-string 等来确定周数(%U、%V、%W)的各种定义。

问:我怎样才能倒退?在 emacs/elisp 中,确定一周的第一天和最后一天的日期,给定年份和周数?

更一般地,解析时间字符串,例如 ISO 8601 周日期 2006-W52-7 ,或一周内没有一天的一周 2013-W46 .

更普遍的是 - 许多日期和时间表示暗示日期间隔。周和月尤其意味着间隔,尽管我认为给定精度的几乎任何时间表示都可以解释为对应于小于精度的时间单位间隔。

问:是否有(合理标准的)emacs/elisp 函数来确定一个月的第一个和最后一个日期,例如年/年格式?等等。

——

这篇文章主要是“我如何在 emacs/elisp 中做到这一点?”题。

这类问题似乎很常见——stackoverflow 上也有类似的问题,询问“我如何在 Javascript/C#/... 中执行此操作”等等等等。

我可以自己做数学。但是 (a) 如果有一个标准的 emacs/elisp 函数来做到这一点会更好,并且 (b) 从谷歌搜索中可以明显看出存在许多陷阱和问题,进一步强调使用标准库函数的好处,如果存在的话。

例如。 Getting first date in week given a year and weeknumber

最佳答案

我有一个类似的问题(见 https://emacs.stackexchange.com/questions/43984/convert-between-iso-week-and-a-normal-date)。

https://emacs.stackexchange.com/questions/43984/convert-between-iso-week-and-a-normal-date 上使用我的解决方案,您的第一个问题的解决方案如下。

例子:

(iso-header 2018 32)
"** WW32 (Monday August 06 - Sunday August 12, 2018)"
(iso-header 2018 53)
"** WW01 (Monday December 31 - Sunday January 06, 2019)"

(defun iso-header(year week)
  (concat
   (format-time-string "** WW%V (%A %B %d - " (iso-beginning-of-week year week))
   (format-time-string "%A %B %d, %Y)" (iso-end-of-week year week))))

关于emacs - ISO emacs/elisp 用于确定与一周的第一天/最后一天相对应的日期,例如ISO 8601 2013-WW47,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20055504/

相关文章:

button - 如何在 Emacs 中的按钮之间跳转?

emacs - 自动关闭emacs shell模式选项卡完成缓冲区?

emacs - Elisp、alist 和字符串;类型混淆

emacs - 组织模式下的语法高亮。语言列表?

emacs - emacs 中的 Ipython 将垃圾文本转储到 shell 中

emacs - 这个次要模式是什么——表示最近左边距的变化

emacs - 如何在 emacs 组织模式中启用并行 PDF 导出

emacs - 如何标记组织模式 src block 结果?

emacs - 在 emacs 中添加新代码时重新缩进 lisp 代码

regex - Lisp 正则表达式匹配带有或不带有常量类型标识符( 3.2 或 3.2f )的数字