Требуются следующие функции: 'encode-time
, 'format-time-string
и 'decode-time
.
Чтобы получить надлежащую документацию, либо C-h f function-name
, либо предоставьте документацию по этой функции, либо общие страницы информации об elisp можно найти здесь: C-h i m elisp RET m time conversion RET
Вот этот фрагмент:
(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
делает все сложение за вас, поэтому если вы передадите ему эквивалент «31 февраля», он вернет «3 марта» (при условии 28 дней).