10 votes

Package pour analyser les dates en Common Lisp ?

Je suis en train d'écrire un simple scraper web en Common Lisp (SBCL) comme exercice d'apprentissage, et j'aimerais trier par date. Pour ce faire, j'ai besoin d'analyser les dates au format "MM/DD/YYYY" en temps universel.

Je pourrais simplement tokeniser la chaîne de caractères et passer les morceaux dans encode-universal-time mais je me dis qu'il doit y avoir une fonction intégrée (ou un paquetage tiers populaire) pour l'analyse des dates. J'apprécierais beaucoup que quelqu'un m'en recommande une :-)

8voto

mcheema Points 333

Cette réponse est très tardive mais le heure locale est riche en fonctionnalités et largement utilisée. Elle est basée sur l'article La longue et douloureuse histoire du temps .

Il soutient :

  1. Arithmétique de l'heure et de la date
  2. Sortie et analyse syntaxique au format timestring ISO 8601
  3. Macros de lecteur pour intégrer des timestrings directement dans le code
  4. Gestion des fuseaux horaires (lira le format tzfile d'unix)
  5. Conversion entre les époques de temps universel et unix
  6. Calcul de la date julienne

3voto

Terje Norderhaug Points 2567

Voir le date de départ nette y simple-date-temps pour Common Lisp. La première a un parse-time que vous pouvez utiliser (voir parse-time.lisp). Les deux sont inclus dans le fichier QuickLisp la collection de la bibliothèque.

3voto

msandiford Points 6297

Vous pouvez essayer date de départ nette qui a PARSE-TIME qui, je pense, fera ce que vous voulez.

Nous sommes en 2022, et le net-telent-date est en marche. github et est également déprécié. Mieux vaut trouver autre chose.

2voto

Ehvince Points 1672

J'utilise l'heure locale et cl-date-time-parser :

edit : et chronicité pour analyser les dates et les heures en langage naturel.

(local-time:parse-timestring "2019-11-13T18:09:06.313650+01:00")  ;; OK
(local-time:parse-timestring "2019-11-13") ;;OK

Cela échoue avec l'heure locale par défaut :

(local-time:parse-timestring "2019/11/13")

mais cela fonctionne avec Chronicity :

(chronicity:parse "2019/11/13")
@2019-11-13T00:00:00.000000+01:00

et nous pouvons définir le séparateur de date de l'heure locale à "/" :

(local-time:parse-timestring "2019/11/13" :date-separator #\/) ;; OK

Il y a aussi les séparateurs d'heure et de date.

Maintenant, un format comme ""Wed Nov 13 18:13:15 2019"" échouera. Nous utiliserons le format cl-date-time-parser bibliothèque :

(cl-date-time-parser:parse-date-time "Wed Nov 13 18:13:15 2019")
;; 3782657595
;; 0

Elle renvoie le temps universel qui, à son tour, peut être ingéré avec la fonction bibliothèque de temps local :

(local-time:universal-to-timestamp *)
;; @2019-11-13T19:13:15.000000+01:00

1voto

ironchicken Points 652

De nombreuses implémentations ont une interface UNIX et, dans ces cas-là, cela inclut la fonction strptime.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X