Saya punya daftar besar tanggal-waktu seperti ini sebagai string:
Jun 1 2005 1:33PM
Aug 28 1999 12:00AM
Saya akan mendorong ini kembali ke bidang datetime yang tepat dalam database sehingga saya perlu mengubahnya menjadi objek datetime nyata.
Ini melalui ORANG Django jadi saya tidak bisa menggunakan SQL untuk melakukan konversi saat disisipkan.
strptime()
akan membuat Anda gila, kecuali jika Anda membungkusnya. Lihat jawaban saya, berdasarkan Atau Weis jawaban untuk iniJawaban:
datetime.strptime
adalah rutin utama untuk mem-parsing string ke dalam data. Ia dapat menangani semua jenis format, dengan format yang ditentukan oleh string format yang Anda berikan:datetime
Objek yang dihasilkan adalah naif-zona waktu.Tautan:
Dokumentasi Python untuk
strptime
: Python 2 , Python 3Dokumentasi python untuk
strptime
/strftime
format string: Python 2 , Python 3strftime.org juga merupakan referensi yang sangat bagus untuk strftime
Catatan:
strptime
= "string parse time"strftime
= "waktu format string"sumber
date
alih - alihdatetime
, melaluinya akandatetime
menangani dengan baik:datetime.strptime('Jun 1 2005', '%b %d %Y').date() == date(2005, 6, 1)
datetime
objek yang sadar zona waktu dengan menambahkan baris ini dalam Python 3:from datetime import timezone; datetime_object = datetime_object.replace(tzinfo=timezone.utc)
"%Y-%m-%d %H:%M:%S"
from datetime import datetime
bukan hanyaimport datetime
.Gunakan perpustakaan dateutil pihak ketiga :
Itu dapat menangani sebagian besar format tanggal, termasuk yang Anda perlu parsing. Ini lebih nyaman daripada
strptime
karena dapat menebak format yang benar sebagian besar waktu.Ini sangat berguna untuk tes menulis, di mana keterbacaan lebih penting daripada kinerja.
Anda dapat menginstalnya dengan:
sumber
Lihat strptime dalam modul waktu . Ini adalah kebalikan dari strftime .
sumber
Saya telah menyusun sebuah proyek yang dapat mengubah beberapa ekspresi yang sangat rapi. Lihat batas waktu .
Berikut beberapa contoh di bawah ini:
pip install timestring
sumber
import timestring
timestring.Date('27 Mar 2014 12:32:29 GMT').year
Lib ini membuatnya SANGAT MUDAH! Terima kasih.2017-02-01
. Sama untuk 5 / Feb / 2017 (namun Februari / 5/2017 dengan benar); tak satu pun dari dua yang terakhir adalah format yang pernah saya lihat digunakan untuk pengetahuan saya, tapi saya pikir saya akan menunjukkannya.Date("20180912")
entah bagaimana mem-parsing nilai2018-11-21
. Gunakan dengan risiko Anda sendiri.Ingat ini dan Anda tidak perlu bingung dalam konversi datetime lagi.
String ke objek datetime =
strptime
objek datetime ke format lain =
strftime
Jun 1 2005 1:33PM
sama dengan
%b %d %Y %I:%M%p
jadi Anda perlu strptime yaitu konversi
string
keKeluaran
Bagaimana jika Anda memiliki format tanggal yang berbeda, Anda dapat menggunakan panda atau dateutil.parse
Keluaran
sumber
%b
rusak jika Anda menguraikan tanggal bahasa Inggris pada mesin yang tidak memiliki lokal bahasa Inggris?Dalam Python> = 3.7.0,
untuk mengkonversi string YYYY-MM-DD ke objek datetime ,
datetime.fromisoformat
dapat digunakan.sumber
Banyak cap waktu memiliki zona waktu tersirat. Untuk memastikan bahwa kode Anda akan berfungsi di setiap zona waktu, Anda harus menggunakan UTC secara internal dan melampirkan zona waktu setiap kali benda asing memasuki sistem.
Python 3.2+:
sumber
mktime()
selama transisi DST) jika Anda tahu metode 2 (datetime.strptime()
)? Jika Anda ingin menghindari pengecualian selama detik kabisat (metode 2 gagal) maka Anda dapat menggunakancalendar.timegm
sebagai gantinya:(datetime(1970,1,1)+timedelta(seconds=timegm(time.strptime(..)))).replace(tzinfo=timezone(timedelta(-3)))
Berikut adalah dua solusi menggunakan Pandas untuk mengonversi tanggal yang diformat sebagai string ke objek datetime.date.
Pengaturan waktu
Dan berikut adalah cara mengonversi contoh waktu-tanggal asli OP:
Ada banyak opsi untuk mengkonversi dari string ke Pandas Stempel menggunakan
to_datetime
, jadi periksa dokumen jika Anda memerlukan sesuatu yang istimewa.Demikian juga, Stempel Waktu memiliki banyak properti dan metode yang dapat diakses selain
.date
sumber
Saya pribadi suka solusinya menggunakan
parser
modul, yang merupakan jawaban kedua untuk pertanyaan ini dan cantik, karena Anda tidak perlu membuat string string apa pun untuk membuatnya bekerja. TETAPI , satu kelemahannya adalah 90% lebih lambat dari jawaban yang diterimastrptime
.Selama Anda tidak melakukan ini jutaan kali berulang kali, saya masih berpikir
parser
metode ini lebih nyaman dan akan menangani sebagian besar format waktu secara otomatis.sumber
Sesuatu yang tidak disebutkan di sini dan berguna: menambahkan akhiran ke hari itu. Saya memisahkan logika akhiran sehingga Anda dapat menggunakannya untuk nomor yang Anda suka, bukan hanya tanggal.
sumber
sumber
Django Timezone sadar contoh objek datetime.
Konversi ini sangat penting untuk Django dan Python ketika Anda memiliki
USE_TZ = True
:sumber
Buat fungsi utilitas kecil seperti:
Ini cukup serbaguna:
sumber
format
adalah kata yang dilindungi undang-undang dengan python dan tidak boleh digunakan sebagai nama variabel.Ini akan membantu untuk mengubah string menjadi datetime dan juga dengan zona waktu
sumber
panah menawarkan banyak fungsi yang berguna untuk tanggal dan waktu. Bit kode ini memberikan jawaban untuk pertanyaan dan menunjukkan bahwa panah juga mampu memformat tanggal dengan mudah dan menampilkan informasi untuk lokal lain.
Lihat http://arrow.readthedocs.io/en/latest/ untuk lebih lanjut.
sumber
Anda dapat menggunakan easy_date untuk membuatnya mudah:
sumber
Jika Anda hanya menginginkan format tanggal maka Anda dapat mengonversinya secara manual dengan mengirimkan masing-masing bidang seperti:
Anda dapat meneruskan nilai string pisah untuk mengonversinya menjadi tipe tanggal seperti:
Anda akan mendapatkan nilai yang dihasilkan dalam format tanggal.
sumber
Anda juga bisa check out
dateparser
Install:
Ini, saya pikir, cara termudah untuk menguraikan tanggal.
Kode sampel:
Keluaran:
sumber
Lihat jawaban saya .
Dalam data dunia nyata ini adalah masalah nyata: format tanggal banyak, tidak cocok, tidak lengkap, tidak konsisten dan multi bahasa / daerah, sering dicampur secara bebas dalam satu dataset. Tidak masalah jika kode produksi gagal, apalagi menjadi pengecualian-senang seperti rubah.
Kita perlu mencoba ... menangkap beberapa format datetime fmt1, fmt2, ..., fmtn dan menekan / menangani perkecualian (dari
strptime()
) untuk semua yang tidak cocok (dan khususnya, menghindari memerlukan tangga indentasi yukky n-deep dari try klausa ..catch). Dari solusi sayasumber
itu menunjukkan "Mulai Tanggal Waktu" Kolom dan "Waktu Login Terakhir" keduanya adalah "objek = string" dalam bingkai data
Dengan menggunakan
parse_dates
opsi dalamread_csv
menyebutkan Anda dapat mengubah datetime string Anda ke dalam format datetime panda.sumber