Data dapat direpresentasikan dalam berbagai bentuk - dan cara mudah untuk merepresentasikan tanggal dan waktu adalah string. Namun, untuk bekerja dengan tanggal dan waktu ini secara aritmatika (seperti menghitung perbedaan waktu, menambah atau mengurangi waktu, dll.). ) - kita perlu mengonversinya menjadi objek ________________8
Salah satu sumber datetime berformat string yang paling umum adalah REST API yang mengembalikan string agnostik, yang kemudian dapat kita konversi ke format lain
Selain itu - zona waktu adalah masalah umum saat bekerja dengan objek datetime, jadi kita harus memikirkannya saat mengonversi juga
Dalam panduan ini - kita akan melihat cara mengonversi string tanggal/waktu menjadi objek Date: 2022-12-01 Time: 10:27:03.929149 Date-time: 2022-12-01 10:27:03.929149 8 dengan Python, menggunakan modul Date: 2022-12-01 Time: 10:27:03.929149 Date-time: 2022-12-01 10:27:03.929149 8 bawaan, tetapi juga memperhitungkan modul pihak ketiga seperti import datetime date_time_str = 'Jul 17 2022 9:20AM' date_time_obj = datetime.datetime.strptime(date_time_str, '%b %d %Y %I:%M%p') print('Date:', date_time_obj.date()) print('Time:', date_time_obj.time()) print('Date-time:', date_time_obj) 1, import datetime date_time_str = 'Jul 17 2022 9:20AM' date_time_obj = datetime.datetime.strptime(date_time_str, '%b %d %Y %I:%M%p') print('Date:', date_time_obj.date()) print('Time:', date_time_obj.time()) print('Date-time:', date_time_obj) 2 dan zona waktu Maya
Modul datetime terdiri dari tiga jenis objek yang berbeda. import datetime date_time_str = 'Jul 17 2022 9:20AM' date_time_obj = datetime.datetime.strptime(date_time_str, '%b %d %Y %I:%M%p') print('Date:', date_time_obj.date()) print('Time:', date_time_obj.time()) print('Date-time:', date_time_obj) 3, import datetime date_time_str = 'Jul 17 2022 9:20AM' date_time_obj = datetime.datetime.strptime(date_time_str, '%b %d %Y %I:%M%p') print('Date:', date_time_obj.date()) print('Time:', date_time_obj.time()) print('Date-time:', date_time_obj) 4, dan Date: 2022-12-01 Time: 10:27:03.929149 Date-time: 2022-12-01 10:27:03.929149 8. Objek import datetime date_time_str = 'Jul 17 2022 9:20AM' date_time_obj = datetime.datetime.strptime(date_time_str, '%b %d %Y %I:%M%p') print('Date:', date_time_obj.date()) print('Time:', date_time_obj.time()) print('Date-time:', date_time_obj) _3 menyimpan tanggal, import datetime date_time_str = 'Jul 17 2022 9:20AM' date_time_obj = datetime.datetime.strptime(date_time_str, '%b %d %Y %I:%M%p') print('Date:', date_time_obj.date()) print('Time:', date_time_obj.time()) print('Date-time:', date_time_obj) 4 menyimpan waktu, dan Date: 2022-12-01 Time: 10:27:03.929149 Date-time: 2022-12-01 10:27:03.929149 8 menyimpan tanggal dan waktu
_______________1Menjalankan kode ini akan menghasilkan
_______________Ketika tidak ada pemformatan khusus yang diberikan, format string default digunakan, mis. e. format untuk "2022-12-0. 27. 03. 929149" dalam format ISO 8601. MM. SS. mmmmmm). Jika string input kami untuk membuat objek Date: 2022-12-01 Time: 10:27:03.929149 Date-time: 2022-12-01 10:27:03.929149 8 berada dalam format ISO 8601 yang sama atau jika Anda mengetahui format yang akan Anda terima di awal, kami dapat dengan mudah mengurainya menjadi objek Date: 2022-12-01 Time: 10:27:03.929149 Date-time: 2022-12-01 10:27:03.929149 8
Menjalankannya akan mencetak tanggal, waktu, dan tanggal-waktu
_______________Di sini, kami menggunakan metode Date: 2022-07-17 Time: 09:20:00 Date-time: 2022-07-17 09:20:00 _1, yang menerima dua argumen
- Tanggal berformat string
- Format argumen pertama
Menentukan format seperti ini membuat penguraian lebih cepat karena Date: 2022-12-01 Time: 10:27:03.929149 Date-time: 2022-12-01 10:27:03.929149 8 tidak perlu mencoba dan menginterpretasikan formatnya sendiri, yang jauh lebih mahal secara komputasi. Nilai yang dikembalikan adalah tipe Date: 2022-12-01 Time: 10:27:03.929149 Date-time: 2022-12-01 10:27:03.929149 8
Dalam contoh kita, Date: 2022-07-17 Time: 09:20:00 Date-time: 2022-07-17 09:20:00 _4 adalah string input dan Date: 2022-07-17 Time: 09:20:00 Date-time: 2022-07-17 09:20:00 5 adalah format string tanggal kita. Nilai Date: 2022-12-01 Time: 10:27:03.929149 Date-time: 2022-12-01 10:27:03.929149 8 yang dikembalikan disimpan sebagai Date: 2022-07-17 Time: 09:20:00 Date-time: 2022-07-17 09:20:00 7
Karena ini adalah objek Date: 2022-12-01 Time: 10:27:03.929149 Date-time: 2022-12-01 10:27:03.929149 8, kita dapat memanggil metode Date: 2022-07-17 Time: 09:20:00 Date-time: 2022-07-17 09:20:00 9 dan "Jun 28 2018 at 7:40AM" -> "%b %d %Y at %I:%M%p" "September 18, 2017, 22:19:55" -> "%B %d, %Y, %H:%M:%S" "Sun,05/12/99,12:30PM" -> "%a,%d/%m/%y,%I:%M%p" "Mon, 21 March, 2015" -> "%a, %d %B, %Y" "2018-03-12T10:12:45Z" -> "%Y-%m-%dT%H:%M:%SZ" 0 langsung di atasnya. Seperti yang Anda lihat dari output, ini mencetak bagian 'tanggal' dan 'waktu' dari string input
Memformat Token
Sebaiknya luangkan waktu sejenak untuk memahami token format - Date: 2022-07-17 Time: 09:20:00 Date-time: 2022-07-17 09:20:00 5 dari sebelumnya
Setiap token mewakili bagian tanggal-waktu yang berbeda, seperti hari, bulan, tahun, hari dalam sebulan atau minggu, dll. Cukup luas untuk mengaktifkan berbagai pemformatan. Beberapa yang umum digunakan, yang juga pernah kami gunakan sebelumnya adalah
- "Jun 28 2018 at 7:40AM" -> "%b %d %Y at %I:%M%p" "September 18, 2017, 22:19:55" -> "%B %d, %Y, %H:%M:%S" "Sun,05/12/99,12:30PM" -> "%a,%d/%m/%y,%I:%M%p" "Mon, 21 March, 2015" -> "%a, %d %B, %Y" "2018-03-12T10:12:45Z" -> "%Y-%m-%dT%H:%M:%SZ" _2. Tahun (4 digit)
- "Jun 28 2018 at 7:40AM" -> "%b %d %Y at %I:%M%p" "September 18, 2017, 22:19:55" -> "%B %d, %Y, %H:%M:%S" "Sun,05/12/99,12:30PM" -> "%a,%d/%m/%y,%I:%M%p" "Mon, 21 March, 2015" -> "%a, %d %B, %Y" "2018-03-12T10:12:45Z" -> "%Y-%m-%dT%H:%M:%SZ" _3. Bulan
- ___4. Hari dalam sebulan
- "Jun 28 2018 at 7:40AM" -> "%b %d %Y at %I:%M%p" "September 18, 2017, 22:19:55" -> "%B %d, %Y, %H:%M:%S" "Sun,05/12/99,12:30PM" -> "%a,%d/%m/%y,%I:%M%p" "Mon, 21 March, 2015" -> "%a, %d %B, %Y" "2018-03-12T10:12:45Z" -> "%Y-%m-%dT%H:%M:%SZ" _5. Jam (24 jam)
- _______________6. Menit
- "Jun 28 2018 at 7:40AM" -> "%b %d %Y at %I:%M%p" "September 18, 2017, 22:19:55" -> "%B %d, %Y, %H:%M:%S" "Sun,05/12/99,12:30PM" -> "%a,%d/%m/%y,%I:%M%p" "Mon, 21 March, 2015" -> "%a, %d %B, %Y" "2018-03-12T10:12:45Z" -> "%Y-%m-%dT%H:%M:%SZ" _7. Detik
- "Jun 28 2018 at 7:40AM" -> "%b %d %Y at %I:%M%p" "September 18, 2017, 22:19:55" -> "%B %d, %Y, %H:%M:%S" "Sun,05/12/99,12:30PM" -> "%a,%d/%m/%y,%I:%M%p" "Mon, 21 March, 2015" -> "%a, %d %B, %Y" "2018-03-12T10:12:45Z" -> "%Y-%m-%dT%H:%M:%SZ" _8. Mikrodetik
Catatan. Semua token ini, kecuali tahunnya, diharapkan tidak terisi (mis. e. Agustus adalah bulan ke-8 dalam setahun.
Jika format string diketahui, string dapat dengan mudah diuraikan menjadi objek Date: 2022-12-01 Time: 10:27:03.929149 Date-time: 2022-12-01 10:27:03.929149 8 menggunakan Date: 2022-07-17 Time: 09:20:00 Date-time: 2022-07-17 09:20:00 1. Mari kita lihat contoh non-sepele yang menerjemahkan dari satu format ke format lainnya
String masukan adalah satu format - "Jul. 20AM". Mengetahui format ini, kami memetakan elemen penyusun ke format ISO 8601 dan mengubahnya menjadi objek _______________8
_______________Berikut adalah daftar singkat datetimes berformat string umum dan format yang sesuai untuk Date: 2022-07-17 Time: 09:20:00 Date-time: 2022-07-17 09:20:00 1
_______________Anda dapat menguraikan string tanggal-waktu dalam format apa pun - selama Anda menggunakan string token format yang benar untuk masukan yang Anda terima
Penanganan tanggal-waktu menjadi lebih kompleks saat berhadapan dengan zona waktu. Semua contoh di atas sejauh ini naif terhadap zona waktu. Ini dikenal sebagai objek datetime naif
Namun, objek Date: 2022-12-01 Time: 10:27:03.929149 Date-time: 2022-12-01 10:27:03.929149 _8 berisi bidang persis untuk menyimpan data terkait zona waktu - $ pip install pytz 5
Bidang $ pip install pytz _5 dimaksudkan untuk menjadi objek $ pip install pytz 7, yang menunjukkan informasi zona waktu. Ini adalah $ pip install pytz 8 secara default, dan menunjukkan bahwa objek datetime naif zona waktu. Pustaka eksternal yang sangat umum untuk menangani zona waktu adalah $ pip install pytz 9. Anda juga dapat menyetel objek PyTz sebagai bidang $ pip install pytz 5
Jika Anda belum memilikinya - instal via
_______________Menggunakan PyTz, kita dapat membuat jangkar untuk waktu yang sadar zona waktu, seperti UTC
_______________Keluaran
_______________Ini bukan lagi jam 11 pagi, tapi jam 2 pagi, karena kami telah mengatur zona waktu beberapa jam ke belakang. Ini mengubah zona waktu dari datetime
import datetime as dt import pytz dtime = dt.datetime.now(pytz.utc) print(dtime) print(dtime.tzinfo) 1 adalah perbedaan antara waktu yang ditampilkan dan waktu UTC. Offset diatur ke import datetime as dt import pytz dtime = dt.datetime.now(pytz.utc) print(dtime) print(dtime.tzinfo) 2. Ini adalah objek yang sadar zona waktu
Demikian pula, kita dapat mengganti interpretasi datetime yang sama di antara zona waktu. Mari kita konversi string, seperti "2022-06-2. 08. 00" ke datetime dan kemudian melokalkannya ke zona waktu "America/New_York"
_______________Catatan. Pelokalan mengubah datetime naif zona waktu menjadi datetime sadar zona waktu, dan memperlakukan zona waktu sebagai zona waktu lokal. Dengan demikian, datetime tetap sama, tetapi mengingat zona waktu yang berbeda, itu tidak lagi mewakili titik waktu yang sama yang tidak terikat dari zona waktu
Kami mendapatkan nilai datetime yang sama, diimbangi dengan -0. 00 dibandingkan dengan waktu UTC
Current date/time: 2022-12-01 10:27:03.929149 017. 08 di Tokyo bukanlah titik waktu yang sama. 08 di New York. 17. 08 di Tokyo adalah. 08 di New York
Bagaimana cara menemukan semua kode/alias zona waktu?
Untuk menemukan semua zona waktu yang tersedia, periksa bidang import datetime as dt import pytz dtime = dt.datetime.now(pytz.utc) print(dtime) print(dtime.tzinfo) 3
Current date/time: 2022-12-01 10:27:03.929149 1Lihat panduan praktis dan praktis kami untuk mempelajari Git, dengan praktik terbaik, standar yang diterima industri, dan menyertakan lembar contekan. Hentikan perintah Googling Git dan benar-benar pelajari itu
Current date/time: 2022-12-01 10:27:03.929149 2Kita dapat mengonversi zona waktu objek Date: 2022-12-01 Time: 10:27:03.929149 Date-time: 2022-12-01 10:27:03.929149 8 yang sadar zona waktu dari satu wilayah ke wilayah lain, alih-alih melokalkan waktu yang naif zona waktu melalui lensa beberapa zona waktu
Ini berbeda dari pelokalan, karena pelokalan mewakili titik waktu yang berbeda, tetapi mengubah zona waktu suatu objek mewakili titik waktu yang sama, melalui lensa yang berbeda
Current date/time: 2022-12-01 10:27:03.929149 3Pertama, kami membuat objek datetime dengan waktu saat ini dan menetapkannya sebagai zona waktu "Amerika/New_York". Kemudian menggunakan metode import datetime as dt import pytz dtime = dt.datetime.now(pytz.utc) print(dtime) print(dtime.tzinfo) _5, kami telah mengonversi Date: 2022-12-01 Time: 10:27:03.929149 Date-time: 2022-12-01 10:27:03.929149 8 ini menjadi zona waktu "Eropa/London". Kedua Date: 2022-12-01 Time: 10:27:03.929149 Date-time: 2022-12-01 10:27:03.929149 8 akan mencetak nilai yang berbeda, menggunakan offset UTC sebagai tautan referensi di antara keduanya
Current date/time: 2022-12-01 10:27:03.929149 42. Tanggal 24 hari berikutnya di London adalah titik waktu yang sama dengan tanggal 21. 24 hari sebelumnya di New York karena London 5 jam lebih cepat
Seperti yang diharapkan, waktu tanggal berbeda karena jaraknya sekitar 5 jam
Modul Date: 2022-12-01 Time: 10:27:03.929149 Date-time: 2022-12-01 10:27:03.929149 8 Python dapat mengubah semua jenis string yang berbeda menjadi objek Date: 2022-12-01 Time: 10:27:03.929149 Date-time: 2022-12-01 10:27:03.929149 8. Tetapi masalah utamanya adalah untuk melakukan ini, Anda perlu membuat string kode pemformatan yang sesuai yang dapat dipahami oleh Date: 2022-07-17 Time: 09:20:00 Date-time: 2022-07-17 09:20:00 1. Membuat string ini membutuhkan waktu dan membuat kode lebih sulit dibaca
Sebagai gantinya, kita bisa menggunakan library pihak ketiga lainnya untuk mempermudah
Dalam beberapa kasus, pustaka pihak ketiga ini juga memiliki dukungan bawaan yang lebih baik untuk memanipulasi dan membandingkan tanggal-waktu, dan beberapa bahkan memiliki zona waktu bawaan, jadi Anda tidak perlu menyertakan paket PyTz tambahan
Mari kita lihat beberapa perpustakaan ini di bagian berikut
Modul dateutil adalah perpanjangan dari modul Date: 2022-12-01 Time: 10:27:03.929149 Date-time: 2022-12-01 10:27:03.929149 8. Salah satu keuntungannya adalah kita tidak perlu meneruskan kode parsing apa pun untuk mengurai string
Untuk mengonversi string secara otomatis ke datetime tanpa token format menggunakan import datetime date_time_str = 'Jul 17 2022 9:20AM' date_time_obj = datetime.datetime.strptime(date_time_str, '%b %d %Y %I:%M%p') print('Date:', date_time_obj.date()) print('Time:', date_time_obj.time()) print('Date-time:', date_time_obj) 1 Python
Current date/time: 2022-12-01 10:27:03.929149 5Fungsi 2022-12-01 02:07:41.960920+00:00 UTC _3 ini akan mengurai string secara otomatis. Anda tidak harus menyertakan string format apa pun. Mari kita coba parsing berbagai jenis string menggunakan import datetime date_time_str = 'Jul 17 2022 9:20AM' date_time_obj = datetime.datetime.strptime(date_time_str, '%b %d %Y %I:%M%p') print('Date:', date_time_obj.date()) print('Time:', date_time_obj.time()) print('Date-time:', date_time_obj) 1
Current date/time: 2022-12-01 10:27:03.929149 6Keluaran
Current date/time: 2022-12-01 10:27:03.929149 7Anda dapat melihat bahwa hampir semua jenis string dapat diurai dengan mudah menggunakan modul _______________1
Meskipun ini nyaman, ingat sebelumnya bahwa harus memprediksi format membuat kode jauh lebih lambat, jadi jika kode Anda memerlukan kinerja tinggi maka ini mungkin bukan pendekatan yang tepat untuk aplikasi Anda
Maya juga membuatnya sangat mudah untuk mengurai string dan mengubah zona waktu. Untuk dengan mudah mengonversi string dengan Maya Python
Current date/time: 2022-12-01 10:27:03.929149 8Keluaran
Untuk mengonversi waktu ke zona waktu yang berbeda
_______________0Keluaran
_______________1Sekarang bukankah itu mudah digunakan?
Keluaran
_______________2Seperti yang Anda lihat, semua format tanggal berhasil diuraikan
Jika kami tidak memberikan info zona waktu, itu secara otomatis mengubahnya menjadi UTC. Oleh karena itu, penting untuk diperhatikan bahwa kami harus memberikan parameter 2022-12-01 02:07:41.960920+00:00 UTC 8 dan 2022-12-01 02:07:41.960920+00:00 UTC 9 jika waktunya tidak dalam UTC
Arrow adalah perpustakaan lain untuk menangani datetime dengan Python. Dan seperti sebelumnya dengan 2022-12-01 02:07:41.960920+00:00 UTC _6, itu juga mengetahui format datetime secara otomatis. Setelah ditafsirkan, ia mengembalikan objek Date: 2022-12-01 Time: 10:27:03.929149 Date-time: 2022-12-01 10:27:03.929149 _8 Python dari objek import datetime date_time_str = 'Jul 17 2022 9:20AM' date_time_obj = datetime.datetime.strptime(date_time_str, '%b %d %Y %I:%M%p') print('Date:', date_time_obj.date()) print('Time:', date_time_obj.time()) print('Date-time:', date_time_obj) 2
Untuk dengan mudah mengubah string menjadi datetime menggunakan import datetime date_time_str = 'Jul 17 2022 9:20AM' date_time_obj = datetime.datetime.strptime(date_time_str, '%b %d %Y %I:%M%p') print('Date:', date_time_obj.date()) print('Time:', date_time_obj.time()) print('Date-time:', date_time_obj) 2 Python
_______________3Keluaran
___4Anda dapat menggunakan import datetime date_time_str = 'Jul 17 2022 9:20AM' date_time_obj = datetime.datetime.strptime(date_time_str, '%b %d %Y %I:%M%p') print('Date:', date_time_obj.date()) print('Time:', date_time_obj.time()) print('Date-time:', date_time_obj) _2 untuk mengonversi zona waktu menggunakan metode import datetime as dt import pytz date_time_str = '2022-06-29 17:08:00' date_time_obj = dt.datetime.strptime(date_time_str, '%Y-%m-%d %H:%M:%S') timezone = pytz.timezone('America/New_York') timezone_date_time_obj = timezone.localize(date_time_obj) print(timezone_date_time_obj) print(timezone_date_time_obj.tzinfo) 5
_______________5Keluaran
_______________6String dikonversi ke wilayah "Amerika/New_York".
Sekarang, mari kita gunakan rangkaian string yang sama seperti yang telah kita gunakan di atas
Kode ini akan gagal untuk string tanggal-waktu yang telah dikomentari, yang merupakan lebih dari separuh contoh kita. Output untuk string lainnya adalah
_______________7Untuk mengurai dengan benar string tanggal-waktu yang dikomentari, Anda harus meneruskan token format yang sesuai untuk memberikan petunjuk perpustakaan tentang cara menguraikannya
Kesimpulan
Pada artikel ini kami telah menunjukkan berbagai cara untuk mengurai string ke objek Date: 2022-12-01 Time: 10:27:03.929149 Date-time: 2022-12-01 10:27:03.929149 8 dengan Python. Anda dapat memilih perpustakaan Python Date: 2022-12-01 Time: 10:27:03.929149 Date-time: 2022-12-01 10:27:03.929149 _8 default atau salah satu perpustakaan pihak ketiga yang disebutkan dalam artikel ini, di antara banyak lainnya
Masalah utama dengan paket default Date: 2022-12-01 Time: 10:27:03.929149 Date-time: 2022-12-01 10:27:03.929149 _8 adalah kita perlu menentukan kode parsing secara manual untuk hampir semua format string tanggal-waktu. Jadi, jika format string Anda berubah di masa mendatang, Anda mungkin juga harus mengubah kode Anda. Tetapi banyak perpustakaan pihak ketiga, seperti yang disebutkan di sini, tidak menanganinya secara otomatis
Satu lagi masalah yang kita hadapi adalah berurusan dengan zona waktu. Cara terbaik untuk menanganinya adalah selalu menyimpan waktu dalam database Anda sebagai format UTC dan kemudian mengonversinya ke zona waktu lokal pengguna bila diperlukan
Pustaka ini tidak hanya bagus untuk parsing string, tetapi juga dapat digunakan untuk berbagai jenis operasi terkait tanggal-waktu. Saya mendorong Anda untuk membaca dokumentasi untuk mempelajari fungsionalitas secara detail