2013-10-26 6 views
1

Мои сообщения электронной почты в Wanderlust иметь заголовок, который выглядит следующим образом:Как конвертировать (день месяц год) до (месяц год день)

Date: Wed, 23 Oct 2013 12:18:15 -0700 

Я хотел бы изменить начало моей print-to-pdf функции так что он ищет текущий буфер для первого свидания он находит (обычно в первой строке буфера) и преобразует его в предлагаемом pdf-file-name, который выглядит следующим образом:

10_23_2013.pdf 

начало моей print-to-pdf функции выглядит следующим образом:

(defun print-to-pdf (pdf-file-name) 
    "Print the current buffer to the given file." 
    (interactive (list 
    (ns-read-file-name "Write PDF file: " "/Users/HOME/.0.data/" nil ".pdf"))) 
    (cond (
    (not (equal pdf-file-name nil)) 

    *** 

Может кто-нибудь подумать о способе поиска даты и превратить ее в предложенный pdf-file-name?


EDIT: Вот некоторые из даты строковых функций, которые я нашел по оглавлению код Wanderlust:

(defun wl-make-date-string() 
    (let ((system-time-locale "C")) 
    (format-time-string "%a, %d %b %Y %T %z"))) 

(defsubst wl-get-date-iso8601 (date) 
    (or (get-text-property 0 'wl-date date) 
     (let* ((d1 (timezone-fix-time date nil nil)) 
     (time (format "%04d%02d%02dT%02d%02d%02d" 
       (aref d1 0) (aref d1 1) (aref d1 2) 
       (aref d1 3) (aref d1 4) (aref d1 5)))) 
    (put-text-property 0 1 'wl-date time date) 
    time))) 

(defun wl-make-date-string() 
    (let ((s (current-time-string))) 
    (string-match "\\`\\([A-Z][a-z][a-z]\\) +[A-Z][a-z][a-z] +[0-9][0-9]? *[0-9][0-9]?:[0-9][0-9]:[0-9][0-9] *[0-9]?[0-9]?[0-9][0-9]" 
      s) 
    (concat (wl-match-string 1 s) ", " 
     (timezone-make-date-arpa-standard s (current-time-zone))))) 

(defun wl-date-iso8601 (date) 
    "Convert the DATE to YYMMDDTHHMMSS." 
    (condition-case() 
     (wl-get-date-iso8601 date) 
    (error ""))) 
+0

Таким образом, чтобы вопросы Короче говоря, вы хотите '23 октября 2013' =>' 10_23_2013'? –

+0

Если возможно, я также могу использовать некоторую помощь (пожалуйста) с помощью 're-search-forward', чтобы извлечь дату« 23 Окт 2013 »(которая может быть любой из 365 возможностей), а затем конвертировать ее в' 10_23_2013'. – lawlist

+0

Если входная строка имеет очень фиксированный формат, например 'Date: Wed, 23 Oct 2013 12:18:15 -0700', то это возможно. В противном случае вам понадобится какой-то якорь для определения даты. Как и в режиме org-mode. Я могу написать функцию, которая отображает 'Date: Wed, 23 Oct 2013 12:18:15 -0700' =>' 10_23_2013'. Достаточно ли этого? –

ответ

2

Вот функция. Если вы можете найти способ извлечения Wed, 23 Oct 2013 12:18:15 -0700, он произведет 10_23_2013.pdf.

(defun transform-date (s &optional shift) 
    (let ((time (apply 'encode-time 
        (org-read-date-analyze 
         s nil 
         (decode-time (current-time)))))) 
    (when shift 
     (setq time (time-add time (days-to-time shift)))) 
    (format-time-string "%m_%d_%Y.pdf" time))) 

Вот простой искатель для даты:

(defun find-and-transform() 
    (goto-char (point-min)) 
    (when (re-search-forward "Date: \\([^:]*?\\)[0-9]+:") 
    (transform-date 
    (match-string-no-properties 1)))) 
+0

Большое спасибо - очень ценим !!!! :) – lawlist

Смежные вопросы