2010-09-12 71 views
164

Module time có thể được khởi tạo bằng giây kể từ kỷ nguyên:Khởi tạo một đối tượng datetime với giây kể từ kỷ nguyên

>>> import time 
>>> t1=time.gmtime(1284286794) 
>>> t1 
time.struct_time(tm_year=2010, tm_mon=9, tm_mday=12, tm_hour=10, tm_min=19, 
       tm_sec=54, tm_wday=6, tm_yday=255, tm_isdst=0) 

Có một cách thanh lịch để khởi tạo một đối tượng datetime.datetime trong cùng một cách?

Trả lời

269

datetime.datetime.fromtimestamp sẽ làm, nếu bạn biết múi giờ, bạn có thể tạo ra sản lượng tương tự như với time.gmtime

>>> datetime.datetime.fromtimestamp(1284286794) 
datetime.datetime(2010, 9, 12, 11, 19, 54) 

hoặc

>>> datetime.datetime.utcfromtimestamp(1284286794) 
datetime.datetime(2010, 9, 12, 10, 19, 54) 
+28

kỳ lạ, 'datetime.utcfromtimestamp' tạo dấu thời gian ngây thơ. Tôi đã phải 'nhập khẩu pytz' và sử dụng' datetime.fromtimestamp (1423524051, pytz.utc) 'để tạo ra một datetime nhận thức. – Matt

+0

làm theo dõi ở trên, với Python> = 3.2 bạn không phải nhập thư viện 'pytz' nếu bạn chỉ muốn dấu thời gian UTC - bạn chỉ cần' từ datetime nhập datetime, múi giờ' và sau đó gọi nó như sau: 'datetime.fromtimestamp (1423524051, timezone.utc)'. Nó đã lưu thêm thư viện nhiều lần khi tôi chỉ cần múi giờ UTC từ 'pytz'. – phouse512

22

Giây kể từ kỷ nguyên để datetime-strftime:

>>> ts_epoch = 1362301382 
>>> ts = datetime.datetime.fromtimestamp(ts_epoch).strftime('%Y-%m-%d %H:%M:%S') 
>>> ts 
'2013-03-03 01:03:02' 
6

Lưu ý rằng d atetime.datetime. fromtimestamp (dấu thời gian) và. utcfromtimestamp (dấu thời gian) không hoạt động trên các cửa sổ cho các ngày trước ngày 1 tháng 1 năm 1970 trong khi dấu thời gian phủ định âm dường như hoạt động trên nền tảng Unix. Các tài liệu nói điều này:

"This may raise ValueError, if the timestamp is out of the range of values supported by the platform C gmtime() function. It’s common for this to be restricted to years in 1970 through 2038"

Xem thêm Issue1646728

+0

: o) có, vẫn còn một số 23 năm để cho nó được cố định – user3666197

+2

bạn có thể sử dụng 'utc_time = datetime (1970,1,1) + timedelta (giây = dấu thời gian)', để giải quyết nó. – jfs

10

Từ các tài liệu, cách đề nghị nhận được một múi giờ đối tượng datetime biết từ giây kể từ kỷ nguyên là:

Python 3:

from datetime import datetime, timezone 
datetime.fromtimestamp(timestamp, timezone.utc) 

Python 2, sử dụng pytz:

from datetime import datetime 
import pytz 
datetime.fromtimestamp(timestamp, pytz.utc) 
+0

Một liên kết đến tài liệu trong phụ đề của bạn ("Python 3", "Python 2") sẽ hữu ích - và tôi cũng khuyên bạn nên thay đổi thứ tự của chúng. –

+0

Đã cập nhật. Để lại thứ tự giống nhau, vì nó khớp với các tài liệu Python. – Meistro

+0

bạn không cần 'pytz' chỉ để lấy đối tượng' utc' tzinfo. [Nó rất dễ dàng để tạo ra nó cho mình] (http://stackoverflow.com/a/2331635/4279) – jfs

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