Parsowanie sformatowanego ciągu czasu (odwrotność ciągu formatu-czasu)

10

format-time-stringFunkcja przyjmuje argument czasu, jak '(21761 64499 350937 0)i ciąg formatu jak "%y-%m-%d %a %H:%M"i zwraca coś podobnego "15-03-12 Thu 16:49".

Jaka jest funkcja odwrotna, która trwa "15-03-12 Thu 16:49"i "%y-%m-%d %a %H:%M", i wraca '(21761 64499 350937 0)?

Próbuję przeanalizować czasy poza witryną, aby przekonwertować je na znaczniki czasu trybu org, ale mam problem ze znalezieniem odpowiedniej funkcji w dokumentacji emacsa.

Edytuj Promuję to od mojego komentarza do odpowiedzi erikstoke. parse-time-stringi org-parse-time-stringsą niewystarczające, ponieważ podczas analizowania wielu standardowych ciągów czasowych nie pozwalają na określone formaty. Obie funkcje są raczej niepełne. W szczególności brakuje im obsługi ISO8601 .

Matthew Piziak
źródło

Odpowiedzi:

4

parse-time-stringanalizuje „standardowe” ciągi czasowe, podobnie jak org-parse-time-string. Dokumentacja twierdzi, że ten drugi będzie szybszy. Żadna z tych metod nie pozwala określić formatu ciągu.

Istnieje również nieudokumentowana funkcja, parse-iso8601-time-stringktóra analizuje ISO8601 w coś. Nie jest dla mnie jasne, jaki powinien być wynik.

erikstokes
źródło
Rzeczywiście, sprawdziłem je. Zwracają nawet „Niepoprawną specyfikację czasu” po karmieniu ISO8601, dlatego wciąż szukam.
Matthew Piziak,
(parse-time-string (current-time-string))pracuje tutaj.
wasamasa,
Istnieje funkcja, która twierdzi, że to robi, ale nie rozumiem, co to ma znaczyć wynik. Zredagowałem to w mojej odpowiedzi.
erikstokes,
2

Miałem podobną sytuację, ale nie mogłem znaleźć niczego, co działałoby po wyjęciu z pudełka. Ale ponieważ org-time-stampobsługuje wszystkie rodzaje formatów, pomyślałem, że kod tam jest. Poniższa funkcja wstawi znacznik czasu organizacji z podanego ciągu czasu. Nie testowałem tego wiele razy, ale "15-03-12 Thu 16:49"da to "[2015-03-12 tor 16:49]". ( "tor"jest czwartek w mojej lokalizacji).

Więc ta odpowiedź nie jest w pełni zgodna z pytaniem, ponieważ nie masz możliwości podania ciągu formatu, ale mam nadzieję, że i tak się uda. Powinien zrozumieć wszystkie formaty obsługiwane przez znaczniki czasu organizacji.

(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)))
Znacząca nazwa użytkownika
źródło
to nie odpowiada na pytanie. Pytanie brzmiało: how can I parse a string with a specified format? ta funkcja wstawia znacznik czasu o określonym formacie.
Cheeso,