Dengan Python, bagaimana Anda mengonversi detik sejak zaman ke objek `datetime`?


248

The timemodul dapat diinisialisasi menggunakan detik sejak zaman:

>>> 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)

Apakah ada cara yang elegan untuk menginisialisasi datetime.datetimeobjek dengan cara yang sama?


3
untuk operasi yang berlawanan buka di sini: convert-a-datetime-object-to-seconds
Trevor Boyd Smith

Jawaban:


404

datetime.datetime.fromtimestamp akan dilakukan, jika Anda mengetahui zona waktu, Anda dapat menghasilkan output yang sama dengan time.gmtime

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

atau

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

42
aneh, datetime.utcfromtimestampmembuat cap waktu naif. Saya harus import pytzdan gunakan datetime.fromtimestamp(1423524051, pytz.utc)untuk membuat datetime sadar.
Matt

6
sebagai tindak lanjut ke atas, dengan Python> = 3,2 Anda tidak perlu mengimpor pytzperpustakaan jika Anda hanya ingin cap waktu UTC - Anda hanya perlu from datetime import datetime, timezonedan kemudian menyebutnya sebagai berikut: datetime.fromtimestamp(1423524051, timezone.utc). Ini telah menyimpan perpustakaan ekstra berkali-kali ketika saya hanya membutuhkan zona waktu UTC dari pytz.
phouse512

38

Detik sejak zaman datetimeke strftime:

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

Itu harus datetime.fromtimestamp (1579366345) .ftimeime ('% Y-% m-% d% H:% M:% S')
vml19

26

Dari dokumen, cara yang disarankan untuk mendapatkan objek waktu-sadar datetime dari detik sejak zaman adalah:

Python 3 :

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

Python 2 , menggunakan pytz:

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

Tautan ke dokumentasi dalam subtitle Anda ("Python 3", "Python 2") akan berguna - dan saya juga merekomendasikan untuk mengubah urutannya.
Adam Matan

Diperbarui. Membiarkan urutan yang sama, karena cocok dengan dokumen Python.
Meistro

Anda tidak pytzhanya perlu mendapatkan utcobjek tzinfo. Sangat mudah untuk membuatnya sendiri
jfs

9

Perhatikan bahwa datetime.datetime. fromtimestamp (timestamp) dan. utcfromtimestamp (timestamp) gagal pada windows untuk tanggal sebelum 1 Januari 1970 sedangkan cap waktu unix negatif tampaknya berfungsi pada platform berbasis unix. Dokumen mengatakan ini:

" Ini dapat meningkatkan ValueError, jika timestamp berada di luar kisaran nilai yang didukung oleh fungsi platform C gmtime (). Biasanya hal ini dibatasi hingga bertahun-tahun pada 1970 hingga 2038 "

Lihat juga Issue1646728


: o) ya, masih sekitar 23 tahun untuk memperbaikinya
user3666197

5
Anda bisa menggunakan utc_time = datetime(1970,1,1) + timedelta(seconds=timestamp), untuk mengatasinya.
jfs
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.