2009-04-15 2 views
6

저는 이머 렉스 Lisp에서 약간의 프로그래밍을하고 있습니다. 그러나 나는 어떤 것들에 대해 어떻게 가야하는지 잘 모르겠습니다.이맥스 Lisp에서 날짜 전체를 삽입하십시오.

내가 아래 목록과 같은 새 줄에 날짜 한달 내내 각을 삽입하기 위해 노력하고있어 :

1월

01/01/09 월 :

02/01/09 화 :

03/01/09 수요일 :

어떻게 올릴 때 그 일을하는거야? 날짜 서식을 지정하는 방법을 찾았지만 일정 범위의 날짜를 반복하는 방법을 찾을 수 없습니다 (이 경우에는 한 달 전체를 반복하고 각 달의 날짜를 인쇄합니다).

사람이 시작하는 방법을 알려줄 수있는 조언이 있습니까?

답변

6

원하는 기능은 'encode-time, 'format-time-string'decode-time입니다. 적절한 문서에 대해서는 , 중 C-h f function-name 또는 당신에게 기능 또는 일반 elisp 정보 페이지에 대한 설명서를 줄 것이다는 여기에서 찾을 수 있습니다 :

(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))))) 

것은 내가 찾을 수 없습니다 : 여기

C-h i m elisp RET m time conversion RET은 조각이다 주어진 달의 일수를 결정하는 방법 (물론, 하드 코딩 할 수 있지만 윤년을 처리해야합니다). 다행히도 'encode-time이 모든 추가 작업을 수행하므로 "2 월 31 일"에 해당하는 값을 전달하면 "3 월 3 일"(28 일 가정)이 반환됩니다.

1

트레이의 대답 사용 dotimes에 약간의 변화 :

(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))))) 
+0

그냥 내 업데이트한다는 의견을 월/일/년의 일/월/년을 읽으면

BTW, 문제는 없습니다 "매월 첫날 삽입" "한달 내내 삽입"이었다 :) 달려있다 며칠 (몇 달이 아닌)을 순환하라. 사람들이 내 대답을 어떻게 도출했는지 혼란 스러울 때를 대비해서. –

+0

Ack, 지금 내 대답은 이해가 안되네요. 오, 글씨는 반복 계산에 대해 잘 알고 있습니다. – scottfrazer

+0

그래, 나는 닷 점을 잊어 버린다. –

3
달력 기능을 사용하여 괜찮다면 내가 이런 일을했을 것

...

(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))) 

당신은 찾을 수 있습니다 기술 함수 사용 (Mx describe-function 또는 Ch f) M-x apropos는 무언가와 관련된 함수 목록을 제공 할 것이고 심지어 irc.freenode.org/#emacs의 더 나은 사람들이 여러분의 모든 질문에 대답 할 것입니다. 당신이

+0

호기심에서 벗어난 이유'(let (_) ... '래퍼가 –

+0

elisp이 작동하지 않는 것을 잊었 기 때문에 ... 업데이트 중 ... – Ben