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.