Path: ...!weretis.net!feeder8.news.weretis.net!feeder1-2.proxad.net!proxad.net!feeder1-1.proxad.net!cleanfeed3-a.proxad.net!nnrp2-2.free.fr!not-for-mail From: Damien Wyart Newsgroups: fr.comp.lang.python Subject: Re: =?iso-8859-1?Q?=C9cart?= entre deux dates. Organization: Serveur de News Free References: Date: Mon, 23 May 2022 13:44:14 +0200 User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/29.0.50 MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit Lines: 46 Message-ID: <628b738e$0$18399$426a74cc@news.free.fr> NNTP-Posting-Date: 23 May 2022 13:44:14 CEST NNTP-Posting-Host: 92.170.39.26 X-Trace: 1653306254 news-2.free.fr 18399 92.170.39.26:47066 X-Complaints-To: abuse@proxad.net Bytes: 2632 * Dominique in fr.comp.lang.python: > Il nous est demandé de calculer l'écart entre deux dates en utilisant > dateutil. > J'ai écrit ces quelques lignes, mais je les trouve compliquées et peu > élégantes. Je n'ai rien trouvé de probant dans la bibliothèque > dateutil : > from dateutil import parser > date1=parser.parse('2022-06-10') > date2=parser.parse('2022-01-01') > print((date1-date2).days) > 160 > Est-il possible de l'améliorer ? De plus, je ne vois pas très bien à > quoi correspond la fonction parser (et parse dans la foulée...) Comme indiqué par Nicolas, parse permet d'analyser une chaîne pour en extraire un object DataTime. La bibliothèque standard permet déjà de le faire mais de manière moins souple et avec moins de support de formats multiples. parser n'est pas une fonction mais permet juste de "ranger" les différents noms dans le module dateutil. En arrière-plan, il correspond aussi à une classe Parser, interne au module. Comme Nicolas l'a également proposé, on peut très bien tout faire en Python standard (je montre deux façons de créer des DateTime) : from datetime import date d1 = date.fromisoformat('2022-06-10') d2 = date(2022, 1, 1) print(d1-d2) -> donne "160 days, 0:00:00" pour cet exercice, plus que parse, c'est peut-être relativedelta, du module dateutil, qui est pertinent : from dateutil.relativedelta import relativedelta print(relativedelta(d1, d2)) -> donne "relativedelta(months=+5, days=+9)" qui est peut-être plus facile à appréhender pour un humain :) -- DW