Análisis de cadena de tiempo formateada (inversa de formato-cadena de tiempo)

10

La format-time-stringfunción toma un argumento de tiempo como '(21761 64499 350937 0)y una cadena de formato como "%y-%m-%d %a %H:%M"y devuelve algo como "15-03-12 Thu 16:49".

¿Cuál es la función inversa, que toma "15-03-12 Thu 16:49"y "%y-%m-%d %a %H:%M", y devuelve '(21761 64499 350937 0)?

Estoy tratando de analizar los tiempos de un sitio web para convertirlos en marcas de tiempo del modo org, pero tengo problemas para encontrar la función correcta en la documentación de emacs.

Editar Estoy promocionando esto desde mi comentario a la respuesta de erikstoke. parse-time-stringy org-parse-time-stringson insuficientes porque, aunque analizan muchas cadenas de tiempo estándar, no permiten formatos específicos. Ambas funciones son bastante incomprensivas. En particular, carecen de soporte ISO8601 .

Matthew Piziak
fuente

Respuestas:

4

parse-time-stringanaliza cadenas de tiempo "estándar", como lo hace org-parse-time-string. La documentación afirma que este último será más rápido. Ninguno de los dos ofrece una forma de especificar el formato de la cadena.

También hay una función no documentada parse-iso8601-time-stringque analiza ISO8601 en algo. No me queda claro cuál se supone que es la salida.

erikstokes
fuente
De hecho, los revisé. Incluso devuelven "Especificación de tiempo no válida" cuando se alimentan con ISO8601, por lo que todavía estoy buscando.
Matthew Piziak
(parse-time-string (current-time-string))trabaja aquí
wasamasa
Hay una función que dice hacer esto, pero no veo lo que se supone que significa la salida. Lo edité en mi respuesta.
erikstokes
2

Tuve una situación similar pero no pude encontrar nada que funcionara fuera de la caja. Pero como org-time-stampmaneja todo tipo de formatos, supuse que el código estaba allí. La siguiente función insertará una marca de tiempo de la organización de una cadena de tiempo proporcionada. No lo he probado por todo tipo de veces, pero "15-03-12 Thu 16:49"dará "[2015-03-12 tor 16:49]". ( "tor"es el jueves en mi localidad).

Entonces, esta respuesta no coincide totalmente con la pregunta, ya que no tiene una forma de proporcionar la cadena de formato, pero con suerte funcionará de todos modos. Debe comprender todos los formatos que maneja el sello de tiempo de organización.

(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)))
Nombre de usuario significativo
fuente
Esto no responde a la pregunta. La pregunta era: how can I parse a string with a specified format? esta función inserta una cadena de tiempo con un formato especificado.
Cheeso