4

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

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

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

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

更一般地,解析一个时间字符串,例如 ISO 8601 week-dates 2006-W52-7,或者一周中没有一天的一周2013-W46

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

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

--

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

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

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

例如,在给定年份和周数的情况下获得一周中的第一个日期

4

1 回答 1

4

我遇到了类似的问题(请参阅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))))
于 2018-08-07T06:05:36.480 回答