ISO 8601 saat biçimi bir zaman dilimi adını saklamaz, sadece karşılık gelen UTC korunur ofset.
Python 3'teki UTC ofsetini korurken bir dosya ctime değerini ISO 8601 zaman dizesine dönüştürmek için:
>>> 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'
Kod, yerel saat diliminizin Doğu Saat Dilimi (ET) olduğunu ve sisteminizin belirtilen POSIX zaman damgası (ts
) yani, Python'un sisteminizdeki veya saat dilimindeki geçmiş bir saat dilimi veritabanına erişimi vardır. belirli bir tarihte aynı kurallar.
Taşınabilir bir çözüme ihtiyacınız varsa; tz veritabanına erişim sağlayan modülü kullanınpytz
:
>>> 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'
Bu durumda sonuç aynıdır.
Saat dilimi adına / kısaltması / bölge kimliğine ihtiyacınız varsa, ayrı olarak saklayın.
>>> dt.astimezone().strftime('%Y-%m-%d %H:%M:%S%z (%Z)')
'2015-11-27 00:29:06-0500 (EST)'
Not: hayır, :
UTC ofseti ve EST
saat dilimi kısaltması ISO 8601 saat biçiminin bir parçası değildir. Benzersiz değil.
Aynı kitaplığın farklı kitaplıkları / farklı sürümleri aynı tarih / saat dilimi için farklı saat dilimi kuralları kullanabilir. Gelecek bir tarihse, kurallar henüz bilinmiyor olabilir. Başka bir deyişle, kullandığınız kurallara bağlı olarak aynı UTC saati farklı bir yerel saate karşılık gelebilir - ISO 8601 biçiminde bir zaman kaydetmek UTC saatini ve platformunuzda kullanılan geçerli saat dilimi kurallarına karşılık gelen yerel saati korur . Farklı kuralları varsa, yerel saati farklı bir platformda yeniden hesaplamanız gerekebilir.