2016-09-06 25 views
12

Cách thành ngữ/hiệu quả nhất để chuyển đổi từ thời gian sửa đổi được lấy từ số stat() gọi cho đối tượng datetime là gì? Tôi đã đưa ra những điều sau (python3):Từ stat(). St_mtime đến datetime?

from datetime import datetime, timedelta, timezone 
from pathlib import Path 

path = Path('foo') 
path.touch() 
statResult = path.stat() 
epoch = datetime(1970, 1, 1, tzinfo=timezone.utc) 
modified = epoch + timedelta(seconds=statResult.st_mtime) 
print('modified', modified) 

Dường như một bout, và một chút ngạc nhiên rằng tôi phải cứng mã hóa kỷ nguyên Unix trong đó. Có cách nào trực tiếp hơn không?

Trả lời

20

Hãy thử datetime.fromtimestamp(statResult.st_mtime)

ví dụ

import datetime 

mod_timestamp = datetime.datetime.fromtimestamp(path.getmtime(<YOUR_PATH_HERE>)) 
+5

Để rõ ràng, đó là một hàm tạo thay thế ('classmethod') trên' datetime' _class_, không phải là hàm của 'datetime' _module_. Vì vậy, nếu bạn chỉ có 'nhập datetime' ở đầu tệp, bạn cần' datetime.datetime.fromtimestamp (...) '. Ngoài ra, OP được sử dụng 'pathlib', không phải là' os.path', mà nên là 'Path (). Stat(). St_mtime'; chúng thậm chí không bao giờ nhập 'os', do đó, việc sử dụng' path.getmtime' từ 'os.path' có thể hơi khó hiểu trong ngữ cảnh của OP. – ShadowRanger

+1

Tôi đã sửa nó để hiển thị datetime được sử dụng hai lần với datetime nhập khẩu. – CashCow

Các vấn đề liên quan