Lebih
Mengkonversi string ke datetime
I've punya daftar besar dari saat-saat seperti ini sebagai string:
Jun 1 2005 1:33PM
Aug 28 1999 12:00AM
I'm akan mendorong mereka kembali ke tepat datetime bidang dalam database, jadi saya perlu untuk sihir mereka ke real datetime benda-benda.
Ini akan melalui Django's ORM sehingga saya bisa't menggunakan SQL untuk melakukan konversi pada insert.
2022
19
datetime.strptime
adalah rutinitas utama untuk parsing string ke datetimes. Hal ini dapat menangani berbagai macam format, dengan format yang ditentukan oleh format string yang anda berikan:Yang dihasilkan
datetime
objek timezone-naif.Link:
Dokumentasi Python untuk
strptime
: Python 2, Python 3Dokumentasi Python untuk
strptime
/strftime
format string: Python 2, Python 3strftime.org ini juga benar-benar baik referensi untuk strftime
Catatan:
strptime
= "string mengurai waktu"strftime
= "string format waktu"Gunakan pihak ketiga dateutil perpustakaan:
Hal ini dapat menangani sebagian besar format tanggal, termasuk salah satu yang anda butuhkan untuk mengurai. It's lebih nyaman dari
strptime
seperti itu bisa menebak format yang benar sebagian besar waktu.It's sangat berguna untuk menulis tes, dimana pembacaan lebih penting dari kinerja.
Anda dapat menginstalnya dengan:
Check out strptime pada waktu modul. Ini adalah kebalikan dari strftime.
Saya telah mengumpulkan sebuah proyek yang dapat mengkonversi beberapa benar-benar rapi ekspresi. Check out timestring.
Berikut ini adalah beberapa contoh di bawah ini:
pip menginstal timestring
Ingat ini dan anda didn't perlu bingung dalam datetime konversi lagi.
String datetime objek =
strptime
datetime objek ke format lain =
strftime
Jun 1 2005 1:33PM
adalah sama dengan
%b %d %Y %I:%M%p
jadi, anda perlu strptime i-e mengkonversi
string
untukOutput
Bagaimana jika anda memiliki format yang berbeda dari tanggal anda dapat menggunakan panda atau dateutil.mengurai
OutPut
Banyak waktu telah tersirat timezone. Untuk memastikan bahwa kode anda akan bekerja di setiap zona waktu, anda harus menggunakan UTC internal dan melampirkan timezone setiap kali benda asing memasuki sistem.
Python 3.2+:
Di Python >= 3.7.0,
untuk mengkonversi YYYY-MM-DD string datetime objek,
datetime.fromisoformat
dapat digunakan.Berikut adalah dua solusi menggunakan Panda untuk mengkonversi tanggal yang diformat sebagai string ke datetime.saat benda-benda.
Timing
Dan di sini adalah bagaimana untuk mengkonversi OP's asli tanggal-waktu contoh:
Ada banyak pilihan untuk mengubah dari string ke Panda Cap menggunakan
to_datetime
, jadi cek docs jika anda perlu sesuatu yang istimewa.Demikian juga, Waktu telah banyak properties dan metode yang dapat diakses di samping
.tanggal
Sesuatu yang isn't yang disebutkan di sini dan lebih berguna: menambahkan akhiran hari. Aku dipisahkan akhiran logika sehingga anda dapat menggunakannya untuk setiap nomor yang anda suka, tidak hanya tanggal.
Saya pribadi suka solusi menggunakan
parser
modul, yang merupakan Jawaban kedua pertanyaan ini dan lebih indah, karena anda don't harus membangun string literal untuk membuatnya bekerja. TAPI, salah satu kelemahan adalah bahwa itu adalah 90% lebih lambat dari jawaban yang diterima denganstrptime
.Selama anda tidak melakukan hal ini juta kali lagi dan lagi, saya masih berpikir
parser
metode ini lebih mudah dan akan menangani sebagian besar waktu format secara otomatis.Django Timezone menyadari datetime objek contoh.
Konversi ini sangat penting untuk Django dan Python ketika anda memiliki
USE_TZ = True
:Membuat sebuah utilitas kecil yang berfungsi seperti:
Ini cukup fleksibel:
panah menawarkan banyak fungsi yang berguna untuk tanggal dan waktu. Ini sedikit kode yang memberikan jawaban atas pertanyaan dan menunjukkan panah itu juga mampu format tanggal dengan mudah dan menampilkan informasi lokal lainnya.
Lihat http://arrow.readthedocs.io/en/latest/ untuk lebih lanjut.
Ini akan membantu untuk mengkonversi string ke datetime dan juga dengan zona waktu
Anda dapat menggunakan easy_date untuk memudahkan:
Jika anda ingin hanya format tanggal maka anda dapat secara manual mengubah itu dengan melewati bidang masing-masing seperti:
Anda dapat melewati split untuk mengkonversi nilai string menjadi tanggal jenis seperti:
Anda akan mendapatkan nilai yang dihasilkan dalam format tanggal.
hal ini menunjukkan "Mulai Tanggal Waktu" Kolom dan "Login Terakhir Waktu" baik "objek = string" data-frame
Dengan menggunakan
parse_dates
diread_csv
lagi anda dapat mengkonversi string datetime ke panda format datetime.Lihat saya answer.
Di dunia nyata data ini adalah masalah nyata: beberapa, tidak cocok, tidak lengkap, tidak konsisten dan multilanguage/wilayah date format, sering dicampur dengan bebas dalam satu dataset. It's tidak ok untuk kode produksi gagal, apalagi pergi pengecualian-senang seperti rubah.
Kita perlu mencoba...menangkap beberapa datetime format fmt1,fmt2,...,fmtn dan menekan/menangani pengecualian (dari
strptime()
) bagi semua orang yang tidak cocok (dan khususnya, hindari membutuhkan yukky n-jauh menjorok tangga try..catch klausa). Dari my solution