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:
>>> import os
>>> from datetime import datetime, timezone
>>> ts = os.path.getctime(some_file)
>>> dt = datetime.fromtimestamp(ts, timezone.utc)
>>> dt.astimezone().isoformat()
'2015-11-27T00:29:06.839600-05:00'
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 :
>>> import os
>>> from datetime import datetime
>>> import pytz # pip install pytz
>>> ts = os.path.getctime(some_file)
>>> dt = datetime.fromtimestamp(ts, pytz.timezone('America/New_York'))
>>> dt.isoformat()
'2015-11-27T00:29:06.839600-05:00'
Hasilnya sama dalam hal ini.
Jika Anda memerlukan nama zona waktu / singkatan / id zona, simpan secara terpisah.
>>> dt.astimezone().strftime('%Y-%m-%d %H:%M:%S%z (%Z)')
'2015-11-27 00:29:06-0500 (EST)'
Catatan: tidak, :
dalam UTC offset dan EST
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.