Stringa della data Python per datare l'oggetto


346

Come faccio a convertire una stringa in un oggetto data in Python?

La stringa sarebbe: "24052010"(corrispondente al formato: "%d%m%Y")

Non voglio un oggetto datetime.datetime, ma piuttosto un datetime.date.

Risposte:


587

Puoi usare strptimenel datetimepacchetto di Python:

>>> import datetime
>>> datetime.datetime.strptime('24052010', "%d%m%Y").date()
datetime.date(2010, 5, 24)

Sto provando un processo simile ad eccezione del fatto che la mia stringa di input non ha l'anno, quindi sembra '2405'. Per impostazione predefinita, l'anno viene considerato come 1900. Il problema si verifica durante l'analisi della data di febbraio come "2902". Ottengo questo errore ValueError: day is out of range for month. Non sono sicuro di come posso impostare l'anno predefinito durante l'analisi.
Shubham Naik,

85
import datetime
datetime.datetime.strptime('24052010', '%d%m%Y').date()

59

Domanda direttamente correlata:

E se lo hai

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

e ottieni:

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 hai provato:

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

ma ottieni ancora il traceback sopra.

Risposta:

>>> 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 ho questo tipo di dati, come ottengo l'oggetto data?
Hardik Gajjar,

Utilizzare il modulo re (espressione regolare) per modificare i dati da "2015-07-20 09: 46: 55 + 00: 00" a "2015-07-20T09: 46: 55-00: 00". Quindi utilizzare dateutil.parse per ottenere un oggetto data.
Schopenhauer,

1
Grazie, in realtà il problema era l'oggetto di tipo dict e ho appena ottenuto una soluzione utilizzando dict.get utilizzando
Hardik Gajjar

2
Un'altra idea è quella di leggere il manuale docs.python.org/3/library/… e notare che% B sta per "Mese come nome completo della locale". che è come "gennaio" o "dicembre", quindi "02" non analizzerà.
Capovolgi il

1
La stringa del formato della data in questo non è corretta, dovrebbe essere un% m non un% B
compleanno

24

Se sei pigro e non vuoi combattere con i letterali per archi, puoi semplicemente andare con il parsermodulo.

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

Solo una nota a margine , poiché stiamo cercando di abbinare anyla rappresentazione di stringhe, è 10 volte più lenta distrptime


soluzione molto semplice, grazie. Stavo cercando di convertire una lunga data di Excel che veniva visualizzata comeMonday, June 03, 2019
Jeff Bluemel il

5

hai una stringa di date come questa, "24052010" e vuoi un oggetto data per questo,

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

questo cus_date ti darà l'oggetto data.

puoi recuperare la stringa di data dal tuo oggetto data usando questo,

cus_date.strftime("%d%m%Y")

3

C'è un'altra libreria chiamata arrowdavvero eccezionale per manipolare la data di Python.

import arrow
import datetime

a = arrow.get('24052010', 'DMYYYY').date()
print(isinstance(a, datetime.date)) # True

1

Utilizzare il modulo temporale per convertire i dati.

Snippet di codice:

import time 
tring='20150103040500'
var = int(time.mktime(time.strptime(tring, '%Y%m%d%H%M%S')))
print var
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.