2010-08-17 13 views
0

J'ai un grand champ de recherche, où les utilisateurs peuvent taper tout texte et de peice il rechercher.aide datetime python

J'ai maintenant besoin d'ajouter dans DOB à ma recherche. Je ne suis pas en train d'ajouter une nouvelle zone de texte avec un sélecteur de points. Je veux juste que les utilisateurs puissent entrer un dob dans une gamme de formats et qu'il le comprendrait.

utilisateurs d'IE peuvent effectuer des recherches en utilisant toute combinaison de ces:

  • 25/08/1970
  • 25-08-1970
  • 1970/08/25
  • 1970-08-25

Mon programme doit comprendre la jma pour chacun.

Y a-t-il un meilleur moyen?

def parse(dob): 
    for d in dob.split(" "): 
     # find the dob 
     if len(d) == 10: 
      # its a dob 
      if d[0:4].isdigit() # this is the year 
       year = d[0:4] 
       month = d[5:7] 
       day = d[8:10] 
      elif d[6:10].isdigit() # this is the year 
       day = d[0:2] 
       month = d[3:5] 
       year= d[6:10] 

Répondre

2

Python-dateutil devrait vous simplifier la vie.

from dateutil.parser import parse as dparse 
for each in ('25/08/1970', '25-08-1970', '1970/08/25', '1970-08-25'): 
    dparse(each) 

dparse(each) renverra une instance datetime.datetime. Vous pouvez récupérer la date, le mois et l'année à partir de l'instance datetime.

Mise à jour

Comme mp0int pointed out, rappelez-vous de localiser.

+0

Vous avez importé en tant que dparse mais appelé comme analyse. – sleepynate

+0

L'a repéré, l'a réparé. Merci quand même :) –

1

Dateutil.parser.parse est une fonction méchant et doit être utilisé avec précaution, comme

In [16]: parse('2010-05-01') 
Out[16]: datetime.datetime(2010, 5, 1, 0, 0) 

In [17]: parse('01-05-2010') 
Out[17]: datetime.datetime(2010, 1, 5, 0, 0) 

La localisation est une question importante en format date heure.

a = parse('01-05-2010') 
a.astimezone(dateutil.tx.tzutc()) # not sure about dateutil.tx.tzutc() 

probablement cela va résoudre votre problème, mais je ne l'utiliser et je ne suis pas sûr fonction de dateutil.tx de sorcière est ce que vous avez besoin.

+0

+1 pour avoir mentionné la localisation. –