Apa yang harus saya lakukan Saya memiliki objek waktu-waktu tidak sadar zona waktu, yang saya perlu menambahkan zona waktu agar dapat membandingkannya dengan objek waktu-waktu sadar-waktu-zona waktu lainnya. Saya tidak ingin mengonversi seluruh aplikasi saya ke zona waktu tanpa mengetahui untuk kasus warisan yang satu ini. Apa yang saya coba Pertama, untuk menunjukkan masalahnya:
Pertama, saya mencoba astimezone:
Tidak terlalu mengejutkan bahwa ini gagal, karena sebenarnya mencoba melakukan konversi. Ganti sepertinya pilihan yang lebih baik (sesuai Python: Cara mendapatkan nilai datetime.today () yaitu "timezone aware"? ):
Tapi seperti yang Anda lihat, ganti tampaknya mengatur tzinfo, tetapi tidak membuat objek sadar. Saya sedang bersiap-siap untuk kembali ke doctoring string input untuk memiliki zona waktu sebelum parsing (saya menggunakan dateutil untuk parsing, jika itu penting), tapi itu tampaknya sangat muram. Juga, saya sudah mencoba ini di kedua python 2.6 dan python 2.7, dengan hasil yang sama. Konteks Saya menulis parser untuk beberapa file data. Ada format lama yang saya perlukan untuk mendukung di mana string tanggal tidak memiliki indikator zona waktu. Saya sudah memperbaiki sumber data, tetapi saya masih perlu mendukung format data lawas. Konversi satu kali data legacy bukan pilihan untuk berbagai alasan BS bisnis. Sementara secara umum, saya tidak suka gagasan hard-coding zona waktu default, dalam hal ini sepertinya pilihan terbaik. Saya tahu dengan keyakinan yang masuk akal bahwa semua data lawas yang dimaksud adalah dalam UTC, jadi saya siap untuk menerima risiko gagal bayar itu dalam hal ini. Jawaban: Secara umum, untuk membuat zona waktu sadar-naif yang naif, gunakan metode pelokalan :
Untuk zona waktu UTC, itu tidak perlu digunakan
bekerja. ( Semua contoh ini menggunakan modul eksternal, tetapi Anda dapat mencapai hasil yang sama hanya menggunakan modul datetime, seperti juga disajikan dalam jawaban SO ini :
Lebih sedikit ketergantungan dan tidak ada masalah pytz. CATATAN: Jika Anda ingin menggunakan ini dengan python3 dan python2, Anda dapat menggunakan ini juga untuk impor zona waktu (hardcode untuk UTC):
Saya telah menggunakan dari dt_aware ke dt_unaware
dan dt_unware ke dt_aware
tetapi jawaban sebelumnya juga merupakan solusi yang baik. Saya menggunakan pernyataan ini di Django untuk mengubah waktu yang tidak disadari menjadi sadar:
Saya setuju dengan jawaban sebelumnya, dan tidak masalah jika Anda baik-baik saja memulai di UTC. Tetapi saya pikir ini juga merupakan skenario umum bagi orang untuk bekerja dengan nilai sadar yang memiliki waktu yang memiliki zona waktu lokal non UTC. Jika Anda hanya pergi dengan nama, seseorang mungkin akan menyimpulkan ganti () akan berlaku dan menghasilkan objek sadar datetime yang tepat. Ini bukan kasusnya. ganti (tzinfo = ...) tampaknya acak dalam perilakunya . Karena itu tidak berguna. Jangan gunakan ini! pelokalan adalah fungsi yang benar untuk digunakan. Contoh:
Atau contoh yang lebih lengkap:
memberi saya nilai data waktu sadar zona waktu saat ini:
Gunakan
Perhatikan bahwa Ini mengkodifikasikan
jawaban @ Sérgio dan @ unutbu . Ini akan "hanya bekerja" dengan
Ini terlihat seperti apa yang Python 3.9 menambahkan
Lampirkan zona waktu:
Pasang zona waktu lokal sistem:
Selanjutnya dikonversi dengan benar ke zona waktu lain:
Daftar zona waktu Wikipedia yang tersedia Ada backport yang memungkinkan penggunaan dalam Python 3.6 hingga 3.8 :
Kemudian:
Dalam format jawaban unutbu; Saya membuat modul utilitas yang menangani hal-hal seperti ini, dengan sintaks yang lebih intuitif. Dapat diinstal dengan pip.
bagi mereka yang hanya ingin membuat waktu sadar zona waktu
cukup baru untuk Python dan saya mengalami masalah yang sama. Saya menemukan solusi ini cukup sederhana dan bagi saya itu berfungsi dengan baik (Python 3.6):
Berganti di antara zona waktu
|