String tanggal python ke objek tanggal

345

Bagaimana cara mengkonversi string ke objek tanggal dengan python?

String akan menjadi: "24052010"(sesuai dengan format: "%d%m%Y")

Saya tidak ingin objek datetime.datetime, melainkan datetime.date.

Elif
sumber

Jawaban:

586

Anda dapat menggunakan strptimedalam datetimepaket Python:

>>> import datetime
>>> datetime.datetime.strptime('24052010', "%d%m%Y").date()
datetime.date(2010, 5, 24)
SilentGhost
sumber
Saya mencoba proses yang sama kecuali untuk string input saya tidak punya tahun, jadi sepertinya '2405'. Secara default, tahun dianggap sebagai 1900. Masalah terjadi ketika menguraikan tanggal Feb seperti '2902'. Saya mendapatkan kesalahan ini ValueError: day is out of range for month. Tidak yakin bagaimana saya bisa mengatur tahun default saat parsing.
Shubham Naik
85
import datetime
datetime.datetime.strptime('24052010', '%d%m%Y').date()
Pencuri
sumber
59

Pertanyaan terkait langsung:

Bagaimana jika Anda memilikinya

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

dan Anda mendapatkan:

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

dan Anda mencoba:

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

tetapi Anda masih mendapatkan traceback di atas.

Menjawab:

>>> 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
sumber
1
2015-07-20 09: 46: 55 + 00: 00 saya memiliki data seperti ini, Bagaimana cara mendapatkan objek tanggal?
Hardik Gajjar
Gunakan modul re (regular expression) untuk mengubah data Anda dari "2015-07-20 09: 46: 55 + 00: 00" menjadi "2015-07-20T09: 46: 55-00: 00". Kemudian gunakan dateutil.parse untuk mendapatkan objek tanggal.
Schopenhauer
1
Terima kasih, sebenarnya masalahnya adalah objek tipe dict dan saya hanya mendapatkan solusi menggunakan dict.get using
Hardik Gajjar
2
Gagasan lain adalah dengan membaca manual docs.python.org/3/library/… dan perhatikan bahwa% B adalah singkatan dari "Month as local name." yang seperti "Januari" atau "Desember" jadi "02" tidak akan diuraikan.
Balik
1
String format tanggal dalam hal ini salah, seharusnya% m bukan% B
theannouncer
24

Jika Anda malas dan tidak ingin bertarung dengan string literal, Anda bisa menggunakan parsermodul.

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

Hanya catatan tambahan , karena kami mencoba mencocokkan anyrepresentasi string, ini 10x lebih lambat daripadastrptime

pengguna1767754
sumber
solusi yang sangat sederhana, terima kasih. Saya mencoba untuk mengkonversi tanggal lama Excel yang sedang ditampilkan sebagaiMonday, June 03, 2019
Jeff Bluemel
5

Anda memiliki string tanggal seperti ini, "24052010" dan Anda ingin objek tanggal untuk ini,

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

cus_date ini akan memberi Anda objek tanggal.

Anda dapat mengambil string tanggal dari objek tanggal Anda menggunakan ini,

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

Ada perpustakaan lain yang disebut arrowsangat bagus untuk membuat manipulasi pada tanggal python.

import arrow
import datetime

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

Gunakan modul waktu untuk mengonversi data.

Cuplikan kode:

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