Analisando a sequência de horas formatada (inversa da sequência de formatação)

10

A format-time-stringfunção usa um argumento de tempo como '(21761 64499 350937 0)e uma string de formato como "%y-%m-%d %a %H:%M"e retorna algo como "15-03-12 Thu 16:49".

Qual é a função inversa, que leva "15-03-12 Thu 16:49"e "%y-%m-%d %a %H:%M", e retorna '(21761 64499 350937 0)?

Estou tentando analisar tempos fora de um site para convertê-los em carimbos de data / hora no modo organizacional, mas estou tendo problemas para encontrar a função correta na documentação do emacs.

Editar Estou promovendo isso do meu comentário para a resposta de erikstoke. parse-time-stringe org-parse-time-stringsão insuficientes porque, embora analisem muitas seqüências de tempo padrão, não permitem formatos especificados. Ambas as funções são bastante incompreensíveis. Em particular, eles não têm suporte ISO8601 .

Matthew Piziak
fonte

Respostas:

4

parse-time-stringanalisa seqüências de tempo "padrão", assim como org-parse-time-string. A documentação afirma que o último será mais rápido. Nem fornece uma maneira de especificar o formato da sequência.

Há também uma função não documentada parse-iso8601-time-stringque analisa a ISO8601 em algo. Não está claro para mim qual deve ser a saída.

erikstokes
fonte
Na verdade, eu verifiquei isso. Eles até retornam "Especificação de tempo inválida" quando alimentados com ISO8601, e é por isso que ainda estou procurando.
Matthew Piziak
(parse-time-string (current-time-string))trabalha aqui.
wasamasa
Há uma função que afirma fazer isso, mas não vejo o que a saída deve significar. Eu editei na minha resposta.
erikstokes
2

Eu tive uma situação semelhante, mas não consegui encontrar nada que funcionasse imediatamente. Mas como org-time-stamplida com todos os tipos de formatos, achei que o código estava lá. A função abaixo inserirá um registro de data e hora da organização a partir de uma sequência de tempo fornecida. Eu não testei por todos os tipos de vezes, mas "15-03-12 Thu 16:49"vai dar "[2015-03-12 tor 16:49]". ( "tor"é quinta-feira no meu local).

Portanto, essa resposta não corresponde totalmente à pergunta, já que você não tem como fornecer a string de formato, mas espero que funcione de qualquer maneira. Ele deve entender todos os formatos que manipula o carimbo de data / hora da organização.

(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)))
Nome de usuário significativo
fonte
isso não responde à pergunta. A pergunta era: how can I parse a string with a specified format? Esta função insere uma timesting com um formato especificado.
Cheeso