【问题标题】:Insert whole month of dates in Emacs Lisp在 Emacs Lisp 中插入整月的日期
【发布时间】:2011-09-04 09:29:25
【问题描述】:

我在 Emacs Lisp 中到处做一些编程,但我不完全确定如何处理某些事情。

我正在尝试插入一整月的日期,每个日期都在一个新行中,如下面的列表:

一月

09 年 1 月 1 日星期一:

02/01/09 星期二:

09 年 3 月 1 日星期三:

我该怎么做呢?我找到了如何格式化日期,但我找不到如何循环某个日期范围(在这种情况下循环整个月并为该月的每一天打印一个日期)。

有没有人可以给我一些关于如何开始的建议?

【问题讨论】:

    标签: emacs elisp


    【解决方案1】:

    你想要的函数是'encode-time'format-time-string'decode-time。 对于正确的文档,C-h f function-name 或者会给你函数的文档,或者可以在这里找到一般的 elisp 信息页面:C-h i m elisp RET m time conversion RET

    这是sn-p:

    (defun my-insert-dates ()
      "insert a bunch of dates"
      (interactive)
      (let* ((month 3)
             (day 1)
             (time (encode-time 1 1 0 day month 2009)))
        (while (= (nth 4 (decode-time time)) month)
          (insert (format-time-string "%D %a:\n" time))
          (setq day (1+ day))
          (setq time (encode-time 1 1 0 day month 2009)))))
    

    我找不到如何确定给定月份的天数(当然,您可以对其进行硬编码,但您必须处理闰年)。幸运的是,'encode-time 会为您完成所有添加操作,因此如果您将其传递给相当于“2 月 31 日”的值,它将返回“3 月 3 日”(假设为 28 天)。

    【讨论】:

      【解决方案2】:

      如果你不介意使用日历功能,我会做这样的事情......

      (require 'calendar)
      (defun display-a-month (day month year)
        (insert (format "%s\n" (calendar-date-string (list  month day year))))
        (if (< day 30)
          (display-a-month (+ day 1) month year)))
      

      您可以使用 describe-function (M-x describe-function 或 C-h f 如前所述) 找到帮助; M-x apropos 将为您提供与某事相关的功能列表,irc.freenode.org / #emacs 上更好的人将回答您所有的问题。

      顺便说一句,问题是“插入整个月”而不是“插入每个月的第一天”:) 取决于您是否阅读 dd/mm/yyyy of mm/dd/yyyy

      【讨论】:

      • 出于好奇,为什么要使用 (let (_) ... 包装器?
      • 只是因为忘记了 elisp 能够完成非功能性工作。更新...
      【解决方案3】:

      使用 dotimes 对 Trey 的回答略有不同:

      (defun my-insert-dates ()
        "insert the first day of each month"
        (interactive)
        (dotimes (mo 12)
          (insert (format-time-string "%D %a:\n" (encode-time 1 1 0 1 (1+ mo) 2009)))))
      

      【讨论】:

      • 只是评论说我更新了我的答案以循环几天(而不是几个月)。以防人们对您如何从我的答案中得出答案感到困惑。
      • Ack,现在我的回答没有意义了 :) 哦,好吧,关于计算循环,dotimes 还是很不错的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-06
      • 1970-01-01
      相关资源
      最近更新 更多