Разбор форматированной строки времени (обратный формату-строке времени)

10

format-time-stringФункция принимает аргумент времени , как '(21761 64499 350937 0)и формат строку , как "%y-%m-%d %a %H:%M"и возвращает нечто подобное "15-03-12 Thu 16:49".

Что такое обратная функция, которая принимает "15-03-12 Thu 16:49"и "%y-%m-%d %a %H:%M", и возвращает '(21761 64499 350937 0)?

Я пытаюсь разобрать время с веб-сайта, чтобы преобразовать его в метки времени в режиме org, но у меня возникают проблемы с поиском нужной функции в документации по emacs.

Edit Я продвигаю это от моего комментария до ответа erikstoke. parse-time-stringи org-parse-time-stringих недостаточно, потому что, хотя они анализируют много стандартных временных строк, они не допускают указанные форматы. Обе функции довольно непонятны. В частности, им не хватает поддержки ISO8601 .

Мэтью Пизиак
источник

Ответы:

4

parse-time-stringразбирает "стандартные" строки времени, как и org-parse-time-string. В документации утверждается, что последний будет быстрее. Ни один из них не дает возможность указать формат строки.

Существует также недокументированная функция, parse-iso8601-time-stringкоторая разбирает ISO8601 на что-то. Мне не ясно, каким должен быть выход.

erikstokes
источник
Действительно, я проверил это. Они даже возвращают «Неверное указание времени» при подаче ISO8601, поэтому я все еще ищу.
Мэтью Пизиак
(parse-time-string (current-time-string))работает здесь
Васамаса
Есть функция, которая утверждает, что делает это, но я не понимаю, что должен означать вывод. Я отредактировал это в своем ответе.
erikstokes
2

У меня была похожая ситуация, но я не смог найти что-то полезное из коробки. Но так как org-time-stampобрабатывает все виды форматов, я решил, что код был там. Функция ниже вставит отметку времени org из предоставленной строки времени. Я не проверял это для всех времен, но "15-03-12 Thu 16:49"это даст "[2015-03-12 tor 16:49]". ( "tor"это четверг в моем регионе).

Таким образом, этот ответ не полностью соответствует вопросу, поскольку у вас нет способа предоставить строку формата, но, надеюсь, он все равно сработает. Он должен понимать все форматы, которые обрабатывает отметка времени org.

(defun jk-org-insert-time-stamp (time-string)
  (interactive "sTime: ")
  (let ((default-time (apply 'encode-time (decode-time))))
    (org-insert-time-stamp
     (apply 'encode-time (org-read-date-analyze time-string default-time default-time)) t t)))
Значимое имя пользователя
источник
это не отвечает на вопрос. Вопрос был в том, что how can I parse a string with a specified format? эта функция вставляет временную строку с указанным форматом.
Cheeso