Saya punya file. Dalam Python, saya ingin mengambil waktu pembuatannya, dan mengubahnya menjadi string waktu ISO (ISO 8601) sambil menjaga fakta bahwa itu dibuat di Zona Waktu Timur (ET) .
Bagaimana cara mengambil waktu file dan mengkonversinya menjadi string waktu ISO yang menunjukkan Zona Waktu Timur (dan memperhitungkan waktu musim panas, jika perlu)?
Jawaban:
Lokal ke ISO 8601:
UTC ke ISO 8601:
Lokal ke ISO 8601 tanpa mikrodetik:
UTC ke ISO 8601 dengan informasi TimeZone (Python 3):
UTC ke ISO 8601 dengan informasi TimeZone Lokal tanpa mikrodetik (Python 3):
Lokal ke ISO 8601 dengan informasi TimeZone (Python 3):
Perhatikan ada bug saat menggunakan
astimezone()
waktu utc. Ini memberikan hasil yang salah:Untuk Python 2, lihat dan gunakan pytz .
sumber
.isoformat()
dapat mengambil parameter pemisah, (Jika Anda menginginkan sesuatu selain 'T'):.isoformat(' ')
It is permitted to omit the 'T' character by mutual agreement.
Inilah yang saya gunakan untuk mengonversi ke format datetime XSD:
Saya menemukan pertanyaan ini ketika mencari format waktu tanggal XSD (
xs:dateTime
). Saya perlu menghapus mikrodetik dariisoformat
.sumber
xs:date
dari stylesheet XSD / XML.xs:dateTime
Representasi Waktu ISO 8601
Standar internasional ISO 8601 menjelaskan representasi string untuk tanggal dan waktu. Dua contoh sederhana dari format ini adalah
(yang keduanya merupakan tanggal 16 Desember 2010), tetapi formatnya juga memungkinkan untuk waktu resolusi sub-detik dan untuk menentukan zona waktu. Format ini tentu saja tidak khusus untuk Python, tetapi baik untuk menyimpan tanggal dan waktu dalam format portabel. Rincian tentang format ini dapat ditemukan di entri Markus Kuhn .
Saya merekomendasikan penggunaan format ini untuk menyimpan waktu dalam file.
Salah satu cara untuk mendapatkan waktu saat ini dalam representasi ini adalah dengan menggunakan strftime dari modul waktu di pustaka standar Python:
Anda bisa menggunakan konstruktor strptime dari kelas datetime:
Yang paling kuat adalah modul Egenix mxDateTime:
Referensi
Dokumentasi modul waktu Python
Dokumentasi kelas data Python
Kelas mxDateTime Egenix
sumber
2018-05-25
2018-05-25T12:16:14+00:00
2018-05-25T12:16:14Z
20180525T121614Z
Saya menemukan datetime.isoformat dalam dokumentasi . Tampaknya melakukan apa yang Anda inginkan:
sumber
ISO 8601 memungkinkan representasi kompak tanpa pemisah kecuali untuk
T
, jadi saya ingin menggunakan one-liner ini untuk mendapatkan string stempel waktu cepat:Jika Anda tidak membutuhkan mikrodetik, tinggalkan
.%f
bagian ini:Untuk waktu setempat:
Edit:
Setelah membaca ini lagi, saya sarankan Anda meninggalkan tanda baca masuk. RFC 3339 merekomendasikan gaya itu karena jika semua orang menggunakan tanda baca, tidak ada risiko hal-hal seperti beberapa string ISO 8601 yang diurutkan dalam grup pada tanda baca mereka. Jadi satu liner untuk string yang sesuai adalah:
sumber
2019-02-23T04:02:04.051Z
dengannew Date().toISOString()
The ISO 8601 format waktu tidak menyimpan waktu nama zona, hanya yang sesuai UTC offset diawetkan.
Untuk mengonversi file ctime ke string waktu ISO 8601 sambil mempertahankan offset UTC dengan Python 3:
Kode ini mengasumsikan bahwa zona waktu lokal Anda adalah Zona Waktu Timur (ET) dan bahwa sistem Anda memberikan offset UTC yang benar untuk timestamp POSIX yang diberikan (
ts
), yaitu, Python memiliki akses ke database zona waktu historis pada sistem Anda atau zona waktu memiliki aturan yang sama pada tanggal tertentu.Jika Anda membutuhkan solusi portabel; gunakan
pytz
modul yang menyediakan akses ke database tz :Hasilnya sama dalam hal ini.
Jika Anda memerlukan nama zona waktu / singkatan / id zona, simpan secara terpisah.
Catatan: tidak,
:
dalam UTC offset danEST
singkatan zona waktu bukan bagian dari format waktu ISO 8601. Itu tidak unik.Perpustakaan yang berbeda / versi yang berbeda dari perpustakaan yang sama dapat menggunakan aturan zona waktu yang berbeda untuk tanggal / zona waktu yang sama. Jika ini adalah tanggal masa depan maka aturan mungkin belum diketahui. Dengan kata lain, waktu UTC yang sama dapat sesuai dengan waktu lokal yang berbeda tergantung pada aturan apa yang Anda gunakan - menghemat waktu dalam format ISO 8601 mempertahankan waktu UTC dan waktu lokal yang sesuai dengan aturan zona waktu saat ini yang digunakan pada platform Anda . Anda mungkin perlu menghitung ulang waktu setempat pada platform yang berbeda jika memiliki aturan yang berbeda.
sumber
Anda harus menggunakan
os.stat
untuk mendapatkan waktu pembuatan file dan kombinasi daritime.strftime
dantime.timezone
untuk memformat:sumber
Koreksi saya jika saya salah (saya tidak), tetapi offset dari UTC berubah dengan waktu musim panas. Jadi sebaiknya Anda gunakan
Saya juga percaya bahwa tanda itu harus berbeda:
Saya bisa saja salah, tapi saya rasa tidak.
sumber
Saya setuju dengan Jarek, dan saya selanjutnya mencatat bahwa karakter pemisah offset ISO adalah titik dua, jadi saya pikir jawaban akhirnya adalah:
sumber
Menambahkan sedikit variasi pada jawaban estani yang luar biasa
Lokal ke ISO 8601 dengan TimeZone dan tanpa info mikrodetik (Python 3):
Output sampel:
Diuji bahwa output ini dapat diuraikan oleh Javascript
Date
dan C #DateTime
/DateTimeOffset
sumber
Saya telah mengembangkan fungsi ini:
sumber
sumber