Các định dạng thời gian ISO 8601 không lưu trữ một tên múi giờ, chỉ có UTC tương ứng bù đắp được bảo tồn.
Để chuyển đổi thời gian tập tin thành chuỗi thời gian ISO 8601 trong khi duy trì bù UTC trong 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'
Mã giả định rằng múi giờ địa phương của bạn là Múi giờ miền đông (ET) và hệ thống của bạn cung cấp bù UTC chính xác cho dấu thời gian POSIX đã cho (ts
), tức là Python có quyền truy cập vào cơ sở dữ liệu múi giờ lịch sử trên hệ thống của bạn hoặc múi giờ có quy tắc tương tự tại một ngày nhất định.
Nếu bạn cần một giải pháp di động; sử dụng pytz
mô-đun cung cấp quyền truy cập vào cơ sở dữ liệu 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'
Kết quả là giống nhau trong trường hợp này.
Nếu bạn cần tên múi giờ / chữ viết tắt / id vùng, hãy lưu trữ riêng.
>>> dt.astimezone().strftime('%Y-%m-%d %H:%M:%S%z (%Z)')
'2015-11-27 00:29:06-0500 (EST)'
Lưu ý: không, :
trong phần bù UTC và EST
chữ viết tắt múi giờ không phải là một phần của định dạng thời gian ISO 8601. Nó không phải là duy nhất.
Các thư viện khác nhau / các phiên bản khác nhau của cùng một thư viện có thể sử dụng các quy tắc múi giờ khác nhau cho cùng một ngày / múi giờ. Nếu đó là một ngày trong tương lai thì các quy tắc có thể chưa được biết. Nói cách khác, thời gian tính theo giờ UTC tương tự có thể tương ứng với một giờ địa phương khác nhau tùy thuộc vào những gì bạn sử dụng quy tắc - tiết kiệm thời gian trong định dạng ISO 8601 mứt UTC thời gian và thời gian địa phương tương ứng với hiện tại quy định múi giờ được sử dụng trên nền tảng của bạn . Bạn có thể cần tính toán lại giờ địa phương trên một nền tảng khác nếu nó có các quy tắc khác nhau.