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.

Jawaban:


586

Anda dapat menggunakan strptimedalam datetimepaket Python:

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

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

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

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


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

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

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.