Obiekt daty i daty w Pythonie

345

Jak przekonwertować ciąg znaków na obiekt daty w Pythonie?

Ciąg będzie: "24052010"(odpowiadający formatowi: "%d%m%Y")

Nie chcę obiektu datetime.datetime, ale raczej datetime.date.

elif
źródło

Odpowiedzi:

586

Możesz użyć strptimew datetimepakiecie Python:

>>> import datetime
>>> datetime.datetime.strptime('24052010', "%d%m%Y").date()
datetime.date(2010, 5, 24)
SilentGhost
źródło
Próbuję podobnego procesu, z wyjątkiem tego, że mój ciąg wejściowy nie ma roku, więc wygląda jak „2405”. Domyślnie rok jest traktowany jako 1900. Problem występuje podczas analizowania daty lutowej, takiej jak „2902”. Otrzymuję ten błąd ValueError: day is out of range for month. Nie jestem pewien, jak mogę ustawić domyślny rok podczas analizowania.
Shubham Naik
85
import datetime
datetime.datetime.strptime('24052010', '%d%m%Y').date()
ThiefMaster
źródło
59

Bezpośrednio powiązane pytanie:

Co jeśli masz

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

i dostajesz:

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

i próbowałeś:

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

ale nadal pojawia się powyższy ślad.

Odpowiedź:

>>> 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
źródło
1
2015-07-20 09: 46: 55 + 00: 00 Mam takie dane, jak uzyskać obiekt daty?
Hardik Gajjar
Użyj modułu re (wyrażenie regularne), aby zmienić dane z „2015-07-20 09: 46: 55 + 00: 00” na „2015-07-20T09: 46: 55-00: 00”. Następnie użyj dateutil.parse, aby uzyskać obiekt daty.
Schopenhauer
1
Dziękuję, właściwie problemem był obiekt typu dict, a ja po prostu dostaję rozwiązanie za pomocą dict.get using
Hardik Gajjar
2
Innym pomysłem jest przeczytanie podręcznika docs.python.org/3/library/... i zauważenie, że% B oznacza „Miesiąc jako pełną nazwę regionu”. który jest jak „styczeń” lub „grudzień”, więc „02” nie zostanie przeanalizowane.
Flip
1
Łańcuch formatu daty w tym jest niepoprawny, powinien być% m, a nie% B
theannouncer
24

Jeśli jesteś leniwy i nie chcesz walczyć z literałami łańcuchowymi, możesz po prostu przejść z parsermodułem.

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

Na marginesie , ponieważ próbujemy dopasować anyreprezentację ciągu, jest on 10 razy wolniejszy niżstrptime

użytkownik1767754
źródło
bardzo proste rozwiązanie, dzięki. Próbowałem przekonwertować długą datę programu Excel, która była wyświetlana jakoMonday, June 03, 2019
Jeff Bluemel
5

masz ciąg daty „24052010” i chcesz do tego obiektu daty,

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

ta data_kusi da ci obiekt daty.

za pomocą tego możesz pobrać ciąg daty z obiektu daty,

cus_date.strftime("%d%m%Y")
Mohideen bin Mohammed
źródło
3

Istnieje inna biblioteka, która nazywa się arrownaprawdę świetną do manipulacji datą Pythona.

import arrow
import datetime

a = arrow.get('24052010', 'DMYYYY').date()
print(isinstance(a, datetime.date)) # True
Kruupös
źródło
1

Użyj modułu czasu do konwersji danych.

Fragment kodu:

import time 
tring='20150103040500'
var = int(time.mktime(time.strptime(tring, '%Y%m%d%H%M%S')))
print var
ShashankS
źródło