[Python] controllo della data

infsant a libero.it infsant a libero.it
Dom 29 Lug 2012 10:37:47 CEST


Un ringraziamento a voi che avete risposto e in modo simpatico vi siete 
confrontati, mi è piaciuta la battuta sul codice +- pythonico. 
Circa Marco Beri, ho per le mani proprio un tuo libro "Python" pocket della 
Apogeo. 
Alla fine mi pare di aver capito che il codice che andrebbe usato è

from datetime import datetime
input = '10/12/1977'
try:
     result = datetime.strptime(input, '%d/%m/%Y')
except ValueError:
     result = None

Bene, l'ho provato e funziona; ora lo devo raccordare col codice che avevo già 
disposto e quindi la prima riga va messa in cima al listato, poi creo una def 
con le righe di cui sopra alla quale passo la data ricevuta da tastiera e 
valuterò la risposta in result: se None la data è sbagliata e va reinserita con 
un While e non con un goto di Commodoresca memoria (chi ha qualche anno sulle 
spalle capirà!)
Un grazie a tutti voi, al prossio dubbio.
Ciao




>----Messaggio originale----
>Da: python-request a lists.python.it
>Data: 28/07/2012 22.40
>A: <python a lists.python.it>
>Ogg: Digest di Python, Volume 77, Numero 37
>
>Invia le richieste di iscrizione alla lista Python all'indirizzo
>	python a lists.python.it
>
>Per iscriverti o cancellarti attraverso il web, visita
>	http://lists.python.it/mailman/listinfo/python
>oppure, via email, manda un messaggio con oggetto `help' all'indirizzo
>	python-request a lists.python.it
>
>Puoi contattare la persona che gestisce la lista all'indirizzo
>	python-owner a lists.python.it
>
>Se rispondi a questo messaggio, per favore edita la linea dell'oggetto
>in modo che sia più utile di un semplice "Re: Contenuti del digest
>della lista Python..."
>
>
>Argomenti del Giorno:
>
>   1. Re: controllo della data (Giorgio Zoppi)
>   2. Re: controllo della data (Nicola Larosa)
>   3. Re: controllo della data (Andrea Francia)
>   4. Re: controllo della data (Daniele Varrazzo)
>   5. Re: controllo della data (Alberto Granzotto)
>   6. Re: controllo della data (Giorgio Zoppi)
>   7. Re: controllo della data (Daniele Varrazzo)
>
>
>----------------------------------------------------------------------
>
>Message: 1
>Date: Sat, 28 Jul 2012 20:49:26 +0200
>From: Giorgio Zoppi <giorgio.zoppi a gmail.com>
>To: Discussioni generali sul linguaggio Python
>	<python a lists.python.it>
>Subject: Re: [Python] controllo della data
>Message-ID:
>	<CAHW5Hkqwz9P4BPXVmYO79721Lkm1E3URsxkBN6vN9=bP4_fqOw a mail.gmail.com>
>Content-Type: text/plain; charset=ISO-8859-1
>
>Marco compariamo
>
>RegExp:
>import re
>
>date = "01/02/1988"
>checkdate ="^(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d"
>obj = re.compile(checkdate)
>if (re.match(date)):
>     print 'Valid date'
>
>
>Datetime
>from datetime import datetime
>date = '10/12/1977'
>input = date.replace("/","")
>result = None
>format = ['%d%m%Y']
>  try:
>    result = datetime.strptime(input, format)
>  except:
>     pass
>
>if (result):
>    print "Validate"
>
>
>Il secondo e' piu pythonico...ma lungo. Hai altre opzioni?
>
>
>------------------------------
>
>Message: 2
>Date: Sat, 28 Jul 2012 20:58:18 +0200
>From: Nicola Larosa <nico a tekNico.net>
>To: Discussioni generali sul linguaggio Python
>	<python a lists.python.it>
>Subject: Re: [Python] controllo della data
>Message-ID: <5014364A.5000501 a tekNico.net>
>Content-Type: text/plain; charset=UTF-8
>
>Giorgio Zoppi wrote:
>>   except:
>>      pass
>
>Tu andrai all'inferno per questo, lo sai sì?
>
>
>> Il secondo e' piu pythonico...
>
>Se 'sta roba è pythonica, io sono Mastro Geppetto.
>
>-- 
>Nicola Larosa - http://www.tekNico.net/
>
>Most women experimentally are bisexual. If you give testosterone shots
>to heterosexual men they become more obsessed with women. If you give
>it to gay men they become more obsessed with men, to lesbians they
>become more obsessed with women. If you give the same shot to a
>heterosexual woman she becomes more obsessed with everybody.
> - Christopher Ryan, March 2012
>
>
>
>------------------------------
>
>Message: 3
>Date: Sat, 28 Jul 2012 21:11:42 +0200
>From: Andrea Francia <andrea a andreafrancia.it>
>To: Discussioni generali sul linguaggio Python
>	<python a lists.python.it>
>Subject: Re: [Python] controllo della data
>Message-ID:
>	<CAOaxVRK_HZte8Aj9Odc9vMpcpQA2RZKDrahyy7v09GkhXkXcUg a mail.gmail.com>
>Content-Type: text/plain; charset="utf-8"
>
>On Sat, Jul 28, 2012 at 8:49 PM, Giorgio Zoppi <giorgio.zoppi a gmail.
com>wrote:
>>
>> Datetime
>> from datetime import datetime
>> date = '10/12/1977'
>> input = date.replace("/","")
>> result = None
>> format = ['%d%m%Y']
>>   try:
>>     result = datetime.strptime(input, format)
>>   except:
>>      pass
>>
>> if (result):
>>     print "Validate"
>>
>
>A parte l'uso scorretto delle eccezioni questa non é una validazione
>corretta.
>Accetterebbe anche 101/2/1977 come data valida e lo convertirebbe (credo) a
>10/12/1977.
>
>Ciao
>-- 
>Andrea Francia http://andreafrancia.it
>-------------- parte successiva --------------
>Un allegato HTML è stato rimosso...
>URL: <http://lists.python.
it/pipermail/python/attachments/20120728/560cd00f/attachment-0001.html>
>
>------------------------------
>
>Message: 4
>Date: Sat, 28 Jul 2012 20:28:06 +0100
>From: Daniele Varrazzo <piro a develer.com>
>To: <python a lists.python.it>
>Subject: Re: [Python] controllo della data
>Message-ID: <705b4e7d20e86b44e396a30234363ab5 a develer.com>
>Content-Type: text/plain; charset=UTF-8; format=flowed
>
>On 2012-07-28 19:49, Giorgio Zoppi wrote:
>> Marco compariamo
>>
>> RegExp:
>> import re
>>
>> date = "01/02/1988"
>> checkdate ="^(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- 
>> /.](19|20)\d\d"
>> obj = re.compile(checkdate)
>> if (re.match(date)):
>>      print 'Valid date'
>
>Ti dice anche se un anno è bisestile?
>
>> Datetime
>> from datetime import datetime
>> date = '10/12/1977'
>> input = date.replace("/","")
>> result = None
>> format = ['%d%m%Y']
>>   try:
>>     result = datetime.strptime(input, format)
>>   except:
>>      pass
>>
>> if (result):
>>     print "Validate"
>>
>>
>> Il secondo e' piu pythonico...ma lungo. Hai altre opzioni?
>
>Basta toglierci tutta la roba che non serve. Che poi che vuol dire, più 
>un pezzo di codice è corto e meglio è? L'estetica del perl?
>
>from datetime import datetime
>input = '10/12/1977'
>try:
>     result = datetime.strptime(input, '%d/%m/%Y')
>except ValueError:
>     result = None
>
>(sebbene l'aggettivo "Pythonico" non sia esattamente ben definito, il 
>tuo esempio *veramente* non lo era..)
>
>
>-- 
>Daniele Varrazzo - Develer S.r.l.
>http://www.develer.com
>
>
>------------------------------
>
>Message: 5
>Date: Sat, 28 Jul 2012 21:42:59 +0200
>From: Alberto Granzotto <agranzot a gmail.com>
>To: Discussioni generali sul linguaggio Python
>	<python a lists.python.it>
>Subject: Re: [Python] controllo della data
>Message-ID:
>	<CAB794n_X28SfjHnRg+10iR9WHi=jAmvLfj_JAnF+MGJqugxWQg a mail.gmail.com>
>Content-Type: text/plain; charset="iso-8859-1"
>
>2012/7/28 Daniele Varrazzo <piro a develer.com>
>
>> On 2012-07-28 19:49, Giorgio Zoppi wrote:
>>
>>> Marco compariamo
>>>
>>> RegExp:
>>> import re
>>>
>>> date = "01/02/1988"
>>> checkdate ="^(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[-
>>> /.](19|20)\d\d"
>>> obj = re.compile(checkdate)
>>> if (re.match(date)):
>>>      print 'Valid date'
>>>
>>
>> Ti dice anche se un anno è bisestile?
>>
>>
>>  Datetime
>>> from datetime import datetime
>>> date = '10/12/1977'
>>> input = date.replace("/","")
>>> result = None
>>> format = ['%d%m%Y']
>>>   try:
>>>     result = datetime.strptime(input, format)
>>>   except:
>>>      pass
>>>
>>> if (result):
>>>     print "Validate"
>>>
>>>
>>> Il secondo e' piu pythonico...ma lungo. Hai altre opzioni?
>>>
>>
>> Basta toglierci tutta la roba che non serve. Che poi che vuol dire, più un
>> pezzo di codice è corto e meglio è? L'estetica del perl?
>>
>> from datetime import datetime
>> input = '10/12/1977'
>> try:
>>     result = datetime.strptime(input, '%d/%m/%Y')
>> except ValueError:
>>     result = None
>>
>> (sebbene l'aggettivo "Pythonico" non sia esattamente ben definito, il tuo
>> esempio *veramente* non lo era..)
>
>
>totalmente d'accordo, e non sono nemmeno sostituibili. Semplicemente quella
>con le RegExp è sbagliata, l'altra no, perché?
>
>import re
>re.match(
>    "^(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d",
>    "31/02/1988") # nota bene, il 31 febbraio probabilmente non esiste
>
>In questo caso con la regexp puoi magari avvicinarti alla correttezza, puoi
>farle estremamente sofisticate e riconoscere i mesi da 30/31/28 giorni e
>arrivare a considerare gli anni bisestili ottenendo qualcosa tipo:
>
> ^(?:(?:(?:0?[13578]|1[02])(\/|-|\.)31)\1|(?:(?:0?[1,3-9]|1[0-2])(\/|-|\.)(?:
29|30)\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:0?2(\/|-|\.)29\3(?:(?:(?:1[6-9]|[2-
9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])
00))))$|^(?:(?:0?[1-9])|(?:1[0-2]))(\/|-|\.)(?:0?[1-9]|1\d|2[0-8])\4(?:(?:1[6-9]
|[2-9]\d)?\d{2})$
>[via <http://regexadvice.com/blogs/mash/archive/2004/04/02/300.aspx>]
>
>ma si tratterebbe probabilmente di masturbazione più che programmazione :P
>
>[scusate ho letto ora "ti dice anche se l'anno è bisestile, ma ormai avevo
>scritto! :P]
>
>
>> --
>> Daniele Varrazzo - Develer S.r.l.
>> http://www.develer.com
>>
>> ______________________________**_________________
>> Python mailing list
>> Python a lists.python.it
>> http://lists.python.it/**mailman/listinfo/python<http://lists.python.
it/mailman/listinfo/python>
>>
>-------------- parte successiva --------------
>Un allegato HTML è stato rimosso...
>URL: <http://lists.python.
it/pipermail/python/attachments/20120728/916d408d/attachment-0001.html>
>
>------------------------------
>
>Message: 6
>Date: Sat, 28 Jul 2012 22:10:47 +0200
>From: Giorgio Zoppi <giorgio.zoppi a gmail.com>
>To: Discussioni generali sul linguaggio Python
>	<python a lists.python.it>
>Subject: Re: [Python] controllo della data
>Message-ID:
>	<CAHW5HkqvJxZMQJtS8n4UnaHqX2wkOz06_o1N=f-s94Ppt+2Dqg a mail.gmail.com>
>Content-Type: text/plain; charset=ISO-8859-1
>
>ok. L'esempio di daniele e quello corretto..Buona serata!
>
>Il 28 luglio 2012 21:42, Alberto Granzotto <agranzot a gmail.com> ha scritto:
>>
>>
>> 2012/7/28 Daniele Varrazzo <piro a develer.com>
>>>
>>> On 2012-07-28 19:49, Giorgio Zoppi wrote:
>>>>
>>>> Marco compariamo
>>>>
>>>> RegExp:
>>>> import re
>>>>
>>>> date = "01/02/1988"
>>>> checkdate ="^(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[-
>>>> /.](19|20)\d\d"
>>>> obj = re.compile(checkdate)
>>>> if (re.match(date)):
>>>>      print 'Valid date'
>>>
>>>
>>> Ti dice anche se un anno è bisestile?
>>>
>>>
>>>> Datetime
>>>> from datetime import datetime
>>>> date = '10/12/1977'
>>>> input = date.replace("/","")
>>>> result = None
>>>> format = ['%d%m%Y']
>>>>   try:
>>>>     result = datetime.strptime(input, format)
>>>>   except:
>>>>      pass
>>>>
>>>> if (result):
>>>>     print "Validate"
>>>>
>>>>
>>>> Il secondo e' piu pythonico...ma lungo. Hai altre opzioni?
>>>
>>>
>>> Basta toglierci tutta la roba che non serve. Che poi che vuol dire, più un
>>> pezzo di codice è corto e meglio è? L'estetica del perl?
>>>
>>> from datetime import datetime
>>> input = '10/12/1977'
>>> try:
>>>     result = datetime.strptime(input, '%d/%m/%Y')
>>> except ValueError:
>>>     result = None
>>>
>>> (sebbene l'aggettivo "Pythonico" non sia esattamente ben definito, il tuo
>>> esempio *veramente* non lo era..)
>>
>>
>> totalmente d'accordo, e non sono nemmeno sostituibili. Semplicemente quella
>> con le RegExp è sbagliata, l'altra no, perché?
>>
>> import re
>> re.match(
>>     "^(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d",
>>     "31/02/1988") # nota bene, il 31 febbraio probabilmente non esiste
>>
>> In questo caso con la regexp puoi magari avvicinarti alla correttezza, puoi
>> farle estremamente sofisticate e riconoscere i mesi da 30/31/28 giorni e
>> arrivare a considerare gli anni bisestili ottenendo qualcosa tipo:
>>
>>
>> ^(?:(?:(?:0?[13578]|1[02])(\/|-|\.)31)\1|(?:(?:0?[1,3-9]|1[0-2])(\/|-|\.)(?:
29|30)\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:0?2(\/|-|\.)29\3(?:(?:(?:1[6-9]|[2-
9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])
00))))$|^(?:(?:0?[1-9])|(?:1[0-2]))(\/|-|\.)(?:0?[1-9]|1\d|2[0-8])\4(?:(?:1[6-9]
|[2-9]\d)?\d{2})$
>> [via <http://regexadvice.com/blogs/mash/archive/2004/04/02/300.aspx>]
>>
>> ma si tratterebbe probabilmente di masturbazione più che programmazione :P
>>
>> [scusate ho letto ora "ti dice anche se l'anno è bisestile, ma ormai avevo
>> scritto! :P]
>>
>>
>>>
>>> --
>>> Daniele Varrazzo - Develer S.r.l.
>>> http://www.develer.com
>>>
>>> _______________________________________________
>>> Python mailing list
>>> Python a lists.python.it
>>> http://lists.python.it/mailman/listinfo/python
>>
>>
>>
>> _______________________________________________
>> Python mailing list
>> Python a lists.python.it
>> http://lists.python.it/mailman/listinfo/python
>>
>
>
>
>-- 
>Quiero ser el rayo de sol que cada día te despierta
>para hacerte respirar y vivir en me.
>"Favola -Moda".
>
>
>------------------------------
>
>Message: 7
>Date: Sat, 28 Jul 2012 21:40:13 +0100
>From: Daniele Varrazzo <piro a develer.com>
>To: <python a lists.python.it>
>Subject: Re: [Python] controllo della data
>Message-ID: <5cf0fa16d15943bfd999f4622b38be2c a develer.com>
>Content-Type: text/plain; charset=UTF-8; format=flowed
>
>On 2012-07-28 20:42, Alberto Granzotto wrote:
>
>> 
>> ^(?:(?:(?:0?[13578]|1[02])(\/|-|\.)31)\1|(?:(?:0?[1,3-9]|1[0-2])(\/|-|\.)(?:
29|30)\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:0?2(\/|-|\.)29\3(?:(?:(?:1[6-9]|[2-
9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])
00))))$|^(?:(?:0?[1-9])|(?:1[0-2]))(\/|-|\.)(?:0?[1-9]|1\d|2[0-8])\4(?:(?:1[6-9]
|[2-9]\d)?\d{2})$
>> [via <http://regexadvice.com/blogs/mash/archive/2004/04/02/300.aspx>]
>>
>> ma si tratterebbe probabilmente di masturbazione più che 
>> programmazione :P
>>
>> [scusate ho letto ora "ti dice anche se l'anno è bisestile, ma ormai 
>> avevo
>> scritto! :P]
>
>No, anzi, grazie per questo capolavoro!
>
>-- 
>Daniele Varrazzo - Develer S.r.l.
>http://www.develer.com
>
>
>------------------------------
>
>_______________________________________________
>Python mailing list
>Python a lists.python.it
>http://lists.python.it/mailman/listinfo/python
>
>
>Fine di Digest di Python, Volume 77, Numero 37
>**********************************************
>




Maggiori informazioni sulla lista Python