Python tarih dizesinden tarihe nesne


345

Bir dizeyi python'daki bir tarih nesnesine nasıl dönüştürebilirim?

Dize olacaktır: "24052010"(formatına tekabül: "%d%m%Y")

Bir datetime.datetime nesnesi değil, bir datetime.date istemiyorum.

Yanıtlar:


586

Sen kullanabilirsiniz strptimeiçinde datetimePython paketinde:

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

Benim giriş dizesi yıl yok dışında benzer bir işlem deniyorum, bu yüzden '2405' gibi görünüyor. Varsayılan olarak yıl olarak alınır 1900. Sorun, Şubat tarihini '2902' gibi ayrıştırırken oluşur. Bu hatayı alıyorum ValueError: day is out of range for month. Ayrıştırma sırasında varsayılan yılı nasıl ayarlayabileceğimden emin değilim.
Shubham Naik

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

59

Doğrudan ilgili soru:

Ya sahipsen

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

ve elde edersiniz:

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

ve sen denedin:

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

ama yine de yukarıdaki izlemeyi alıyorsunuz.

Cevap:

>>> 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 Bu tür verilerim var, tarih nesnesini nasıl alabilirim?
Hardik Gajjar

Verilerinizi "2015-07-20 09: 46: 55 + 00: 00" yerine "2015-07-20T09: 46: 55-00: 00" olarak değiştirmek için re (normal ifade) modülünü kullanın. Sonra bir date nesnesi elde etmek için dateutil.parse komutunu kullanın.
Schopenhauer

1
Teşekkür ederim, aslında sorun dict tipi nesne oldu ve ben sadece dict.get kullanarak çözüm olsun
Hardik Gajjar

2
Başka bir fikir, docs.python.org/3/library/… kılavuzunu okumak ve% B'nin "Ayın tam adı olarak ay" anlamına geldiğini fark etmektir . "Ocak" veya "Aralık" gibi, yani "02" ayrışmayacak.
çevir

1
Buradaki tarih biçimi dizesi yanlış,% B değil% B
olmalı

24

Eğer tembelseniz ve string değişmezleriyle savaşmak istemiyorsanız, sadece parsermodüle gidebilirsiniz .

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

Sadece bir yan not , anydize temsilini eşleştirmeye çalıştığımızdan , 10 kat daha yavaşstrptime


çok basit bir çözüm, teşekkürler. Görüntülenen bir Excel uzun tarihini dönüştürmeye çalışıyordumMonday, June 03, 2019
Jeff Bluemel

5

böyle bir tarih dizeniz var, "24052010" ve bunun için bir tarih nesnesi istiyorsunuz,

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

bu cus_date size tarih nesnesi verecektir.

bunu kullanarak tarih nesnenizden tarih dizesini alabilirsiniz,

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

3

arrowPython tarihinde manipülasyon yapmak için gerçekten harika denilen başka bir kütüphane var .

import arrow
import datetime

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

1

Verileri dönüştürmek için zaman modülünü kullanın.

Kod snippet'i:

import time 
tring='20150103040500'
var = int(time.mktime(time.strptime(tring, '%Y%m%d%H%M%S')))
print var
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.