String de data do Python para objeto de data

345

Como faço para converter uma string em um objeto de data em python?

A cadeia seria: "24052010"(correspondente ao formato "%d%m%Y":)

Eu não quero um objeto datetime.datetime, mas sim um datetime.date.

elif
fonte

Respostas:

586

Você pode usar strptimeno datetimepacote do Python:

>>> import datetime
>>> datetime.datetime.strptime('24052010', "%d%m%Y").date()
datetime.date(2010, 5, 24)
SilentGhost
fonte
Estou tentando um processo semelhante, exceto que minha string de entrada não tem o ano, portanto parece '2405'. Por padrão, o ano é considerado como 1900. O problema ocorre ao analisar a data de fevereiro como '2902'. Eu recebo esse erro ValueError: day is out of range for month. Não tenho certeza de como posso definir o ano padrão durante a análise.
Shubham Naik 19/04
85
import datetime
datetime.datetime.strptime('24052010', '%d%m%Y').date()
ThiefMaster
fonte
59

Pergunta diretamente relacionada:

E se você tiver

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

e você obtém:

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

e você tentou:

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

mas você ainda recebe o rastreio acima.

Responda:

>>> 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
fonte
11
2015-07-20 09: 46: 55 + 00: 00 eu tenho esse tipo de dados, como obtenho o objeto de data?
Hardik Gajjar
Use o módulo re (expressão regular) para alterar seus dados de "2015-07-20 09: 46: 55 + 00: 00" para "2015-07-20T09: 46: 55-00: 00". Em seguida, use dateutil.parse para obter um objeto de data.
Schopenhauer
11
Obrigado, realmente problema era tipo dict objeto e eu apenas obter solução usando dict.get usando
Hardik Gajjar
2
Outra idéia é ler o manual docs.python.org/3/library/… e observe que% B significa "Mês como nome completo do código do idioma". que é como "janeiro" ou "dezembro", para que "02" não seja analisado.
aleta
11
A seqüência de formato de data em isso é incorreto, ele deve ser uma% m não um% B
theannouncer
24

Se você é preguiçoso e não quer lutar com literais de string, basta ir com o parsermódulo.

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

Apenas uma observação : como estamos tentando corresponder à anyrepresentação de strings, é 10 vezes mais lenta questrptime

user1767754
fonte
solução muito simples, obrigado. Eu estava tentando converter um longa data Excel que estava sendo exibido comoMonday, June 03, 2019
Jeff Bluemel
5

você tem uma sequência de datas como esta, "24052010" e deseja um objeto de data para isso,

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

este cus_date fornecerá o objeto date.

você pode recuperar a sequência de datas do seu objeto de data usando isso,

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

Existe outra biblioteca chamada arrowrealmente ótima para fazer manipulação na data do python.

import arrow
import datetime

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

Use o módulo de tempo para converter dados.

Fragmento de código:

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