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.

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)

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()

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))

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


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

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

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.