2009-12-18 6 views
2

Je n'avais jamais travaillé avec le module datetime dans Python 2.3, et j'ai un problème très stupide. Je dois lire une date dans le formatLire une date formatée dans Python 2.3?

'10-JUL-2010' 

puis soustraire un jour (j'utiliser timedelta), et retourner la chaîne

'09-JUL-2010 00:00:00 ET' 

Bien sûr, cela est pour des centaines de dates. Bien que cela devrait être trivial, je ne trouve pas l'information sur la façon de lire les dates formatées dans Python 2.3! Aidez-moi!

Modifier

Je suis en mesure de récupérer la date formatée comme un tuple, mais il n'acceptera pas l'objet timedelta pour la soustraction! Je travaille encore là-dessus ...

** Modifier **

Enfin ... grâce à votre aide, j'ai pu résoudre le problème comme suit:

print (datetime(*(time.strptime(date_string, format)[0:6])).strftime('%d-%b-%Y')).upper()+'00:00:00 ET' 

Répondre

3

Vous êtes à la recherche datetime.datetime.strptime(), mais la documentation est horrible pour cette fonction, c'est effectivement l'opération inverse de datetime.datetime.strftime().

La chaîne de format que vous cherchez est: '%d-%b-%Y'

Voir: http://www.python.org/doc/2.3.5/lib/node211.html et http://www.python.org/doc/2.3.5/lib/datetime-datetime.htmlethttp://www.python.org/doc/2.3.5/lib/module-time.html

Edit: Oh Snap! Il n'y a pas de strptime dans le module datetime dans python 2.3. C'est dans le module time, vous devrez utiliser celui-ci à la place.

+0

Oui, mais la fonction 'strptime()' n'est pas disponible! – Escualo

+1

Il est dans le module de temps, comme indiqué dans l'édition. Ce dernier lien va vous montrer la lumière. – Sufian

+0

Merci ... pas j'essaie d'obtenir le résultat de 'strptime()' pour soustraire un objet 'timedelta'. Ils ne sont pas compatibles! C'est un cauchemar! – Escualo

2

Eh bien, il n'y a pas intégré pour cela dans 2.3, only from 2.5 on. Mais pour que l'un format que vous pouvez analyser la main ...

months = { 'JAN' : 1, 'FEB' : 2, ... } # write that yourself :p 
day,mon,year = thedate.split('-') 
day = int(day) 
mon = months[mon] 
year = int(year) 
parsed = datetime.datetime(day=day, month=month, year=year) 
0

Si strptime() ne fonctionne pas pour vous, il y a aussi la possibilité de forcer avec brute une expression régulière:

import re 
import date 
timestamp_regex = re.compile(r"(\d\d)-(\w\w\w)-(\d\d\d\d)") 
# month_mapping: a mapping for 3 letter months to integers 
d1 = datetime.date(int(match.group(3)),   #year 
        month_mapping[match.group(2)],#month 
        int(match.group(1)))   #day 
Questions connexes