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.

Odpowiedzi:


586

Możesz użyć strptimew datetimepakiecie Python:

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

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


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

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


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

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

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.