Saat mencoba membuat semuanya bekerja dengan modul datetime, sebagian besar pengguna Python menghadapi titik ketika kami menggunakan menebak-dan-memeriksa sampai kesalahan hilang. datetime adalah salah satu API yang tampaknya mudah digunakan, tetapi mengharuskan pengembang untuk memiliki pemahaman mendalam tentang apa arti beberapa hal sebenarnya. Jika tidak, mengingat kompleksitas masalah terkait tanggal dan waktu, memperkenalkan bug yang tidak terduga itu mudah. Show
Standar waktuKonsep pertama yang harus dipahami ketika bekerja dengan waktu adalah standar yang mendefinisikan bagaimana kita dapat mengukur satuan waktu. Dengan cara yang sama kita memiliki standar untuk mengukur berat atau panjang yang menentukan kilogram atau meter, kita memerlukan cara yang akurat untuk menentukan apa ‘kedua’ cara. Kita kemudian dapat menggunakan referensi waktu lain—seperti hari, minggu, atau tahun—menggunakan standar kalender sebagai kelipatan detik (lihat Kalender Gregorian sebagai contoh). UT1Salah satu cara paling sederhana untuk mengukur satu detik adalah sebagai pecahan hari, mengingat kami dapat menjamin matahari akan terbit dan terbenam setiap hari (di sebagian besar tempat). Ini melahirkan Waktu Universal (UT1), penerus GMT (Greenwich Mean Time). Hari ini, kami menggunakan bintang dan quasar untuk mengukur berapa lama waktu yang dibutuhkan Bumi untuk melakukan rotasi penuh mengelilingi matahari. Bahkan jika ini tampaknya cukup tepat, masih ada masalah; karena tarikan gravitasi bulan, pasang surut, dan gempa bumi, panjang hari berubah sepanjang tahun. Meskipun ini bukan masalah untuk sebagian besar aplikasi, ini menjadi masalah non-sepele ketika kita membutuhkan pengukuran yang benar-benar tepat. Triangulasi GPS adalah contoh yang baik dari proses peka waktu, di mana menjadi yang kedua menghasilkan lokasi yang sama sekali berbeda di dunia. TAIAkibatnya, Waktu Atom Internasional (TAI) dirancang seakurat mungkin. Menggunakan jam atom di beberapa laboratorium di seluruh bumi, kami mendapatkan ukuran detik yang paling akurat dan konstan, yang memungkinkan kami menghitung interval waktu dengan akurasi tertinggi. Ketepatan ini merupakan berkah sekaligus kutukan karena TAI sangat tepat sehingga menyimpang dari UT1 (atau yang kita sebut waktu sipil). Ini berarti bahwa kita pada akhirnya akan memiliki jam siang yang menyimpang secara substansial dari siang matahari. UTCItu mengarah pada pengembangan Waktu Universal Terkoordinasi (UTC), yang menyatukan yang terbaik dari kedua unit. UTC menggunakan pengukuran satu detik seperti yang didefinisikan oleh TAI. Hal ini memungkinkan pengukuran waktu yang akurat sambil memperkenalkan detik kabisat untuk memastikan bahwa waktu tidak menyimpang dari UT1 lebih dari 0,9 detik. Bagaimana semua ini diputar bersama di komputer AndaDengan semua latar belakang ini, Anda sekarang seharusnya dapat memahami bagaimana sistem operasi melayani waktu pada saat tertentu. Sementara komputer tidak memiliki jam atom di dalamnya tetapi menggunakan jam internal yang disinkronkan dengan seluruh dunia melalui Network Time Protocol (NTP). Dalam sistem mirip Unix, cara paling umum untuk mengukur waktu adalah dengan menggunakan waktu POSIX, yang didefinisikan sebagai jumlah detik yang telah berlalu pada zaman Unix (Kamis, 1 Januari 1970), tanpa memperhitungkan detik kabisat. Karena waktu POSIX tidak menangani detik kabisat (juga tidak Python), beberapa perusahaan telah menentukan cara mereka sendiri menangani waktu dengan mengolesi detik kabisat sepanjang waktu di sekitarnya melalui server NTP mereka (lihat waktu Google sebagai contoh). Zona waktuSaya telah menjelaskan apa itu UTC dan bagaimana hal itu memungkinkan kita untuk menentukan tanggal dan waktu, tetapi negara-negara ingin memiliki waktu dinding siang hari yang sesuai dengan waktu matahari untuk siang hari, sehingga matahari berada di puncak langit pada pukul 12 siang. Itulah sebabnya UTC mendefinisikan offset, sehingga kita dapat memiliki jam 12 pagi dengan offset +4 jam dari UTC. Ini secara efektif berarti bahwa waktu aktual tanpa offset adalah jam 8 pagi. Pemerintah menentukan standar offset dari UTC yang mengikuti posisi geografis, secara efektif menciptakan zona waktu. Basis data yang paling umum untuk zona waktu dikenal sebagai Basis Data Olson. Ini dapat diambil dengan Python menggunakan dateutil.tz:
Note that adding wall times can lead to unexpected results when DST changes occur. Finally, dateutil plays nicely with the fold attribute added in PEP0495 and provides backward compatibility if you are using earlier versions of Python. Quick tipsAfter all this, how should we avoid the common issues when working with time?
Libraries worth mentioning
Mario Corchero will be speaking at PyCon 2017, delivering his talk, It’s time for datetime, in Portland, Oregon. |