[Python] controllo della data

Giorgio Zoppi giorgio.zoppi a gmail.com
Sab 28 Lug 2012 22:10:47 CEST


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".


Maggiori informazioni sulla lista Python