Tanggal waktu Python menjadi mudah.
Mendukung Python 3.8 dan yang lebih baru .
>>> impor pendulum>>> now_in_paris = pendulum.now('Europe/Paris')>>> now_in_paris'2016-07-04T00:49:58.502116+02:00'# Peralihan zona waktu yang mulus>>> sekarang_in_paris.in_timezone('UTC')'2016-07-03T22:49:58.502116+00:00'>>> besok = pendulum.now().add(days=1)>>> minggu_terakhir = pendulum.now() .kurangi(minggu=1)>>> masa lalu = pendulum.sekarang().kurangi(menit=2)>>> past.diff_for_humans()'2 menit yang lalu'>>> delta = masa lalu - minggu_ terakhir>>> delta.hours23>>> delta.in_words(locale='en')'6 hari 23 jam 58 menit'# Penanganan waktu tanggal yang tepat normalisasi>>> pendulum.datetime(2013, 3, 31, 2, 30, tz='Eropa/Paris')'31-03-2013T03:30:00+02:00' # 2:30 tidak ada (Waktu dilewati)# Penanganan transisi dst yang benar>>> just_before = pendulum.datetime(2013 , 3, 31, 1, 59, 59, 999999, tz='Eropa/Paris')'31-03-2013T01:59:59.999999+01:00'>>> just_before.add(mikrodetik=1)'31-03-2013T03:00:00+02:00'
Situs Resmi
Dokumentasi
Pelacak Masalah
Instance datetime
asli sudah cukup untuk kasus-kasus dasar, tetapi ketika Anda menghadapi kasus penggunaan yang lebih kompleks, instance tersebut sering kali menunjukkan keterbatasan dan tidak begitu intuitif untuk digunakan. Pendulum
menyediakan API yang lebih bersih dan mudah digunakan dengan tetap mengandalkan perpustakaan standar. Jadi ini masih datetime
tapi lebih baik.
Tidak seperti perpustakaan datetime lainnya untuk Python, Pendulum adalah pengganti drop-in untuk kelas datetime
standar (yang diwarisi darinya), jadi, pada dasarnya, Anda dapat mengganti semua instance datetime
Anda dengan instance DateTime
dalam kode Anda (ada pengecualian untuk perpustakaan yang memeriksa tipe objek dengan menggunakan fungsi type
seperti sqlite3
atau PyMySQL
misalnya).
Ini juga menghilangkan gagasan tentang waktu yang naif: setiap instance Pendulum
sadar akan zona waktu dan secara default dalam UTC
untuk kemudahan penggunaan.
Pendulum juga meningkatkan kelas timedelta
standar dengan menyediakan metode dan properti yang lebih intuitif.
Meskipun kelas DateTime
adalah subkelas dari datetime
ada beberapa kasus yang jarang terjadi di mana kelas tersebut tidak dapat menggantikan kelas asli secara langsung. Berikut adalah daftar (tidak lengkap) kasus-kasus yang dilaporkan beserta kemungkinan solusinya, jika ada:
sqlite3
akan menggunakan fungsi type()
untuk menentukan tipe objek secara default. Untuk mengatasinya Anda dapat mendaftarkan adaptor baru:
dari pendulum import DateTimefrom sqlite3 import register_adapterregister_adapter(DateTime, lambda val: val.isoformat(' '))
mysqlclient
(sebelumnya MySQLdb
) dan PyMySQL
akan menggunakan fungsi type()
untuk menentukan tipe objek secara default. Untuk mengatasinya Anda dapat mendaftarkan adaptor baru:
import MySQLdb.convertersimport pymysql.convertersfrom pendulum import DateTimeMySQLdb.converters.conversions[DateTime] = MySQLdb.converters.DateTime2literalpymysql.converters.conversions[DateTime] = pymysql.converters.escape_datetime
django
akan menggunakan metode isoformat()
untuk menyimpan waktu dalam database. Namun karena pendulum
selalu mengetahui zona waktu, informasi offset akan selalu dikembalikan oleh isoformat()
sehingga menimbulkan kesalahan, setidaknya untuk database MySQL. Untuk mengatasinya, Anda dapat membuat DateTimeField
Anda sendiri atau menggunakan solusi sebelumnya untuk MySQLdb
:
dari django.db.models import DateTimeField sebagai BaseDateTimeFieldfrom pendulum import DateTimeclass DateTimeField(BaseDateTimeField):def value_to_string(self, obj):val = self.value_from_object(obj)if isinstance(value, DateTime):return value.to_datetime_string()return ' ' jika val Tidak ada yang lain val.isoformat()
Kontribusi sangat diharapkan, terutama dalam hal pelokalan.
Untuk mengerjakan basis kode Pendulum, Anda ingin mengkloning proyek secara lokal dan menginstal dependensi yang diperlukan melalui puisi.
$ git clone [email protected]:sdispater/pendulum.git $ instalasi puisi
Jika Anda ingin membantu pelokalan, ada dua kasus berbeda: lokal sudah ada atau belum.
Jika lokal tidak ada, Anda perlu membuatnya menggunakan utilitas clock
:
./jam lokal buat
Ini akan menghasilkan direktori di pendulum/locales
yang diberi nama sesuai lokal Anda, dengan struktur berikut:
/
- custom.py
- lokal.py
File locale.py
tidak boleh diubah. Ini berisi terjemahan yang disediakan oleh database CLDR.
File custom.py
adalah file yang ingin Anda modifikasi. Ini berisi data yang dibutuhkan Pendulum yang tidak disediakan oleh database CLDR. Anda dapat mengambil data en sebagai referensi untuk melihat data mana yang dibutuhkan.
Anda juga harus menambahkan tes untuk lokal yang dibuat atau dimodifikasi.