Deutsch   English   Français   Italiano  
<628b738e$0$18399$426a74cc@news.free.fr>

View for Bookmarking (what is this?)
Look up another Usenet article

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 <damien.wyart@free.fr>
Newsgroups: fr.comp.lang.python
Subject: Re: =?iso-8859-1?Q?=C9cart?= entre deux dates.
Organization: Serveur de News Free
References: <t6dghv$1nu1$1@gioia.aioe.org>
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 <zzz@aol.com.invalid> 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