Chaîne de date Python pour objet date

345

Comment convertir une chaîne en un objet date en python?

La chaîne serait: "24052010"( ce qui correspond au format: "%d%m%Y")

Je ne veux pas d'un objet datetime.datetime, mais plutôt un datetime.date.

elif
la source

Réponses:

586

Vous pouvez utiliser strptimedans le datetimepackage de Python:

>>> import datetime
>>> datetime.datetime.strptime('24052010', "%d%m%Y").date()
datetime.date(2010, 5, 24)
SilentGhost
la source
J'essaie un processus similaire, sauf que ma chaîne d'entrée n'a pas l'année, elle ressemble donc à «2405». Par défaut, l'année est considérée comme 1900. Le problème se produit lors de l'analyse de la date de février comme «2902». Je reçois cette erreur ValueError: day is out of range for month. Je ne sais pas comment je peux définir l'année par défaut lors de l'analyse.
Shubham Naik
85
import datetime
datetime.datetime.strptime('24052010', '%d%m%Y').date()
ThiefMaster
la source
59

Question directement liée:

Et si vous avez

datetime.datetime.strptime("2015-02-24T13:00:00-08:00", "%Y-%B-%dT%H:%M:%S-%H:%M").date()

et vous obtenez:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/_strptime.py", line 308, in _strptime
    format_regex = _TimeRE_cache.compile(format)
  File "/usr/local/lib/python2.7/_strptime.py", line 265, in compile
    return re_compile(self.pattern(format), IGNORECASE)
  File "/usr/local/lib/python2.7/re.py", line 194, in compile
    return _compile(pattern, flags)
  File "/usr/local/lib/python2.7/re.py", line 251, in _compile
    raise error, v # invalid expression
sre_constants.error: redefinition of group name 'H' as group 7; was group 4

et vous avez essayé:

<-24T13:00:00-08:00", "%Y-%B-%dT%HH:%MM:%SS-%HH:%MM").date()

mais vous obtenez toujours la trace ci-dessus.

Réponse:

>>> from dateutil.parser import parse
>>> from datetime import datetime
>>> parse("2015-02-24T13:00:00-08:00")
datetime.datetime(2015, 2, 24, 13, 0, tzinfo=tzoffset(None, -28800))
Schopenhauer
la source
1
2015-07-20 09: 46: 55 + 00: 00 j'ai ce type de données, comment puis-je obtenir un objet date?
Hardik Gajjar
Utilisez le module re (expression régulière) pour changer vos données de "2015-07-20 09: 46: 55 + 00: 00" à "2015-07-20T09: 46: 55-00: 00". Utilisez ensuite dateutil.parse pour obtenir un objet date.
Schopenhauer
1
Merci, en fait le problème était un objet de type dict et j'obtiens simplement une solution en utilisant dict.get en utilisant
Hardik Gajjar
2
Une autre idée est de lire le manuel docs.python.org/3/library/… et de remarquer que% B signifie "mois comme nom complet de la locale". qui est comme "janvier" ou "décembre" donc "02" ne va pas analyser.
Retournez le
1
La chaîne de format de date est incorrecte, il doit s'agir d'un% m et non d'un% B
theeannouncer
24

Si vous êtes paresseux et que vous ne voulez pas vous battre avec des littéraux de chaîne, vous pouvez simplement utiliser le parsermodule.

from dateutil import parser
dt = parser.parse("Jun 1 2005  1:33PM")
print(dt.year, dt.month, dt.day,dt.hour, dt.minute, dt.second)
>2005 6 1 13 33 0

Juste une note latérale , comme nous essayons de faire correspondre anyla représentation des chaînes, elle est 10 fois plus lente questrptime

user1767754
la source
solution très simple, merci. J'essayais de convertir une longue date Excel qui était affichée commeMonday, June 03, 2019
Jeff Bluemel
5

vous avez une chaîne de date comme celle-ci, "24052010" et vous voulez un objet date pour cela,

from datetime import datetime
cus_date = datetime.strptime("24052010", "%d%m%Y").date()

ce cus_date vous donnera un objet date.

vous pouvez récupérer la chaîne de date de votre objet date en utilisant ceci,

cus_date.strftime("%d%m%Y")
Mohideen bin Mohammed
la source
3

Il existe une autre bibliothèque appelée arrowvraiment géniale pour faire des manipulations sur la date python.

import arrow
import datetime

a = arrow.get('24052010', 'DMYYYY').date()
print(isinstance(a, datetime.date)) # True
Kruupös
la source
1

Utilisez le module de temps pour convertir les données.

Extrait de code:

import time 
tring='20150103040500'
var = int(time.mktime(time.strptime(tring, '%Y%m%d%H%M%S')))
print var
shashankS
la source