ใน Python คุณแปลงวินาทีอย่างไรตั้งแต่ยุคเป็นออบเจ็กต์ `datetime '


248

timeโมดูลสามารถเริ่มต้นใช้ตั้งแต่ยุควินาที:

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

มีวิธีที่สวยงามในการเริ่มต้นdatetime.datetimeวัตถุในลักษณะเดียวกันหรือไม่?


3
สำหรับการดำเนินการที่ตรงกันข้ามไปที่นี่: แปลง -datetime วัตถุเพื่อวินาที
เทรเวอร์ Boyd Smith

คำตอบ:


404

datetime.datetime.fromtimestamp จะทำอย่างไรถ้าคุณรู้ว่าเขตเวลาคุณสามารถสร้างผลลัพธ์เดียวกันกับ time.gmtime

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

หรือ

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

42
พิลึกdatetime.utcfromtimestampสร้างเวลาที่ไร้เดียงสา ฉันต้องimport pytzและใช้datetime.fromtimestamp(1423524051, pytz.utc)เพื่อสร้างวันที่และเวลาที่รับรู้
แมตต์

6
ตามที่กล่าวมาข้างต้นด้วย Python> = 3.2 คุณไม่จำเป็นต้องนำเข้าpytzไลบรารีถ้าคุณต้องการเวลา UTC เท่านั้น - คุณเพียงแค่ต้องfrom datetime import datetime, timezoneเรียกใช้แล้วดังนี้: datetime.fromtimestamp(1423524051, timezone.utc). มันได้บันทึกไลบรารีพิเศษหลายครั้งเมื่อฉันต้องการเขตเวลา UTC จากpytzเท่านั้น
phouse512

38

วินาทีนับตั้งแต่ยุค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'

ควรเป็นวันที่และเวลาจาก Timestamp (1579366345) .stftime ('% Y-% m-% d% H:% M:% S')
vml19

27

จากเอกสารวิธีที่แนะนำในการรับวัตถุ datetime ที่รับรู้เขตเวลาจากไม่กี่วินาทีนับตั้งแต่ยุคคือ:

Python 3 :

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

Python 2โดยใช้pytz:

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

ลิงก์ไปยังเอกสารประกอบในคำบรรยายของคุณ ("Python 3", "Python 2") จะมีประโยชน์ - และฉันยังแนะนำให้เปลี่ยนคำสั่งซื้อด้วย
Adam Matan

Updated ออกจากคำสั่งเดิมเนื่องจากตรงกับเอกสาร Python
Meistro

คุณไม่ต้องการpytzเพียงรับutcวัตถุ tzinfo มันง่ายที่จะสร้างมันขึ้นมาเอง
jfs

9

โปรดทราบว่า datetime.datetime fromtimestamp (timestamp) และutcfromtimestamp (การประทับเวลา) ล้มเหลวบน windows สำหรับวันที่ก่อน 1 มกราคม 1970 ในขณะที่การประทับเวลา unix เชิงลบดูเหมือนว่าจะทำงานบนแพลตฟอร์มที่ใช้ Unix เอกสารพูดอย่างนี้:

"สิ่งนี้อาจเพิ่ม ValueError หากการประทับเวลาอยู่นอกช่วงของค่าที่สนับสนุนโดยแพลตฟอร์ม C gmtime () ฟังก์ชั่นมันเป็นเรื่องธรรมดาที่สิ่งนี้จะถูก จำกัด ให้ปี 2513 ถึง 2581 "

ดูที่Issue1646728


: o) ใช่ยังคงมีอีก 23 ปีที่จะทำให้มันคงที่
user3666197

5
คุณสามารถใช้utc_time = datetime(1970,1,1) + timedelta(seconds=timestamp)เพื่อแก้ไขปัญหา
jfs
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.