Analyse de la chaîne de temps formatée (inverse de format-time-string)

10

La format-time-stringfonction prend un argument de temps comme '(21761 64499 350937 0)et une chaîne de format comme "%y-%m-%d %a %H:%M"et renvoie quelque chose comme "15-03-12 Thu 16:49".

Quelle est la fonction inverse, qui prend "15-03-12 Thu 16:49"et "%y-%m-%d %a %H:%M", et retourne '(21761 64499 350937 0)?

J'essaie d'analyser les heures d'un site Web afin de les convertir en horodatages en mode org, mais j'ai du mal à trouver la bonne fonction dans la documentation emacs.

Modifier Je fais la promotion de cela de mon commentaire à la réponse d'erikstoke. parse-time-stringet org-parse-time-stringsont insuffisants car, bien qu'ils analysent de nombreuses chaînes de temps standard, ils ne permettent pas les formats spécifiés. Les deux fonctions sont plutôt incompréhensibles. En particulier, ils manquent de prise en charge ISO8601 .

Matthew Piziak
la source

Réponses:

4

parse-time-stringanalyse les chaînes de temps "standard", comme le fait org-parse-time-string. La documentation affirme que ce dernier sera plus rapide. Aucun des deux ne permet de spécifier le format de la chaîne.

Il existe également une fonction non documentée parse-iso8601-time-stringqui analyse ISO8601 en quelque chose. Il n'est pas clair pour moi ce que la sortie est censée être.

erikstokes
la source
En effet, je les ai vérifiés. Ils renvoient même "spécification de temps invalide" lorsqu'ils sont alimentés ISO8601, c'est pourquoi je cherche toujours.
Matthew Piziak
(parse-time-string (current-time-string))travaille ici.
wasamasa
Il existe une fonction qui prétend faire cela, mais je ne vois pas ce que la sortie est censée signifier. Je l'ai édité dans ma réponse.
erikstokes
2

J'ai eu une situation similaire, mais je n'ai rien trouvé qui fonctionnait hors de la boîte. Mais comme il org-time-stampgère toutes sortes de formats, j'ai pensé que le code était là. La fonction ci-dessous insérera un horodatage org à partir d'une chaîne horaire fournie. Je ne l'ai pas testé depuis toutes sortes de fois, mais pour lui "15-03-12 Thu 16:49"ça va donner "[2015-03-12 tor 16:49]". ( "tor"c'est jeudi dans ma région).

Cette réponse ne correspond donc pas entièrement à la question, car vous n'avez pas de moyen de fournir la chaîne de format, mais j'espère que cela fonctionnera de toute façon. Il doit comprendre tous les formats gérés par org-time-stamp.

(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)))
Nom d'utilisateur significatif
la source
cela ne répond pas à la question. La question était, how can I parse a string with a specified format? Cette fonction insère une horodatage avec un format spécifié.
Cheeso