ไม่time.time()
ในโมดูลเวลาหลามกลับเวลาของระบบหรือเวลาใน UTC หรือไม่
ไม่time.time()
ในโมดูลเวลาหลามกลับเวลาของระบบหรือเวลาใน UTC หรือไม่
คำตอบ:
time.time()
ฟังก์ชันส่งกลับจำนวนวินาทีตั้งแต่ยุคที่เป็นวินาที โปรดทราบว่า "ยุค" ถูกกำหนดให้เป็นจุดเริ่มต้นของวันที่ 1 มกราคม 1970 ใน UTC ดังนั้นยุคที่กำหนดไว้ในแง่ของ UTC และสร้างช่วงเวลาที่ทั่วโลกในเวลา ไม่ว่าคุณจะอยู่ที่ไหน "วินาทีที่ผ่านมายุค" (time.time ()) จะส่งกลับค่าเดียวกันในช่วงเวลาเดียวกัน
นี่คือเอาต์พุตตัวอย่างบางส่วนที่ฉันรันบนคอมพิวเตอร์ของฉันแปลงเป็นสตริงเช่นกัน
Python 2.7.3 (default, Apr 24 2012, 00:00:54)
[GCC 4.7.0 20120414 (prerelease)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import time
>>> ts = time.time()
>>> print ts
1355563265.81
>>> import datetime
>>> st = datetime.datetime.fromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S')
>>> print st
2012-12-15 01:21:05
>>>
ts
ตัวแปรเวลากลับมาในไม่กี่วินาที จากนั้นฉันแปลงเป็นสตริงโดยใช้datetime
ไลบรารีทำให้เป็นสตริงที่มนุษย์สามารถอ่านได้
import time
เมื่อ datetime ให้เวลาคุณโดยทั่วไป เพียงแค่ลบมิลลิวินาที -str(datetime.datetime.now()).split('.')[0]
time.time()
ไม่ได้อยู่ในเขตเวลาใด ๆ "วินาทีนับตั้งแต่ยุค" เป็นคำ; มันไม่ได้ผ่านไปกี่วินาทีนับตั้งแต่เวลา (ยุค) คุณสามารถแปลงเป็นเวลาท้องถิ่นของคุณ (พร้อมฐานข้อมูล tz) และ / หรือ UTC เขตเวลาได้อย่างง่ายดาย btw หากคุณลดลง.strftime()
ผลลัพธ์คือ (เกือบ) เหมือนกัน (+/- microseconds)
นี่เป็นรูปแบบข้อความของการประทับเวลาที่สามารถใช้ในไฟล์ข้อความของคุณ (ชื่อคำถามมีความแตกต่างในอดีตดังนั้นคำแนะนำเกี่ยวกับคำตอบนี้จึงเปลี่ยนเพื่อให้ชัดเจนว่ามันสามารถตีความได้อย่างไรในเวลา [อัพเดท 2016-01-14]
คุณสามารถรับการประทับเวลาเป็นสตริงโดยใช้.now()
หรือ.utcnow()
ของdatetime.datetime
:
>>> import datetime
>>> print datetime.datetime.utcnow()
2012-12-15 10:14:51.898000
ความnow
แตกต่างจากutcnow
ที่คาดไว้ - มิฉะนั้นจะทำงานในลักษณะเดียวกัน:
>>> print datetime.datetime.now()
2012-12-15 11:15:09.205000
คุณสามารถสร้างการประทับเวลาให้กับสตริงได้อย่างชัดเจน:
>>> str(datetime.datetime.now())
'2012-12-15 11:15:24.984000'
หรือคุณสามารถระบุรูปแบบเวลาที่คุณต้องการได้ชัดเจนยิ่งขึ้น:
>>> datetime.datetime.now().strftime("%A, %d. %B %Y %I:%M%p")
'Saturday, 15. December 2012 11:19AM'
หากคุณต้องการรูปแบบ ISO ให้ใช้.isoformat()
วิธีการของวัตถุ:
>>> datetime.datetime.now().isoformat()
'2013-11-18T08:18:31.809000'
คุณสามารถใช้สิ่งเหล่านี้เป็นตัวแปรสำหรับการคำนวณและการพิมพ์โดยไม่ต้องแปลง
>>> ts = datetime.datetime.now()
>>> tf = datetime.datetime.now()
>>> te = tf - ts
>>> print ts
2015-04-21 12:02:19.209915
>>> print tf
2015-04-21 12:02:30.449895
>>> print te
0:00:11.239980
import datetime; print "%s: My timestamp message" % datetime.datetime.utcnow()
Python3:import datetime; print ("%s: My timestamp message" % datetime.datetime.utcnow())
datetime.datetime.utcnow()
คือความชั่วร้าย มันสร้าง datetime ไร้เดียงสาที่ไม่ใช่เวลาท้องถิ่น เว้นแต่เวลาท้องถิ่นของคุณคือ UTC จะไม่ถูกต้อง ใช้datetime.datetime.now(datetime.timezone.utc)
แทน สิ่งนี้จะสร้างวันที่และเวลาที่รับรู้ถึงเขตเวลาซึ่งแทนเวลาปัจจุบัน
จากคำตอบจาก #squiguy เพื่อให้ได้เวลาประทับจริงฉันจะพิมพ์ cast จาก float
>>> import time
>>> ts = int(time.time())
>>> print(ts)
1389177318
อย่างน้อยนั่นคือแนวคิด
type(time.time())
ให้<type 'float'>
int()
เป็น polymorphic มันจะกลับมาlong
ถ้าจำเป็นกับ Python เวอร์ชั่นเก่า - จำนวนเต็มทั้งหมดจะยาวกับ Python เวอร์ชั่นใหม่
คำตอบอาจไม่ใช่หรือทั้งสองอย่าง
ไม่ใช่: time.time()
ส่งคืนประมาณจำนวนวินาทีที่ผ่านไปนับตั้งแต่ยุค ผลลัพธ์ไม่ได้ขึ้นอยู่กับเขตเวลาดังนั้นจึงไม่ใช่ UTC หรือเวลาท้องถิ่น นี่คือPOSIX defintion สำหรับ "วินาทีตั้งแต่ยุค"
ทั้งคู่: time.time()
ไม่ต้องการให้ซิงโครไนซ์นาฬิกาของระบบของคุณดังนั้นมันจึงแสดงค่าของมัน (แม้ว่ามันจะไม่เกี่ยวข้องกับเขตเวลาท้องถิ่น) คอมพิวเตอร์ที่แตกต่างกันอาจได้รับผลลัพธ์ที่แตกต่างกันในเวลาเดียวกัน ในทางตรงกันข้ามถ้ามีเวลาเครื่องคอมพิวเตอร์ของคุณจะทำข้อมูลให้ตรงกันแล้วมันเป็นเรื่องง่ายที่จะได้รับเวลา UTC จากการประทับเวลา (ถ้าเราไม่สนใจเผ่นวินาที):
from datetime import datetime
utc_dt = datetime.utcfromtimestamp(timestamp)
เกี่ยวกับวิธีรับการประทับเวลาจากเวลา UTC ในเวอร์ชัน Python ต่างๆดูที่ฉันจะรับวันที่แปลงเป็นวินาทีตั้งแต่เวลาตามยุคตาม UTC ได้อย่างไร
datetime.utcfromtimestamp
ในขณะที่มี upvotes 308 รายการสำหรับคำตอบด้วยdatetime.fromtimestamp
:-(
time.time()
ฟังก์ชั่นกลับมา (มันสั้นมาก) ความคิดเห็นของคุณตอบคำถามอื่น ๆ (คุณเปลี่ยนความคิดเห็นของคุณตั้งแต่ฉันเริ่มตอบรับแล้วแย่กว่านั้น) บันทึกนอกเหนือ; ควรใช้คำว่า "ถูกต้อง" เท่าที่จำเป็น (เขตเวลามีความซับซ้อน - ไม่มีสัญลักษณ์แสดงหัวข้อย่อยสีเงิน - เป็นการแลกเปลี่ยนเฉพาะสำหรับกรณีการใช้งานเฉพาะ)
datetime.datetime.utcfromtimestamp(ts)
อย่าใช้ เว้นแต่เวลาท้องถิ่นของคุณคือ UTC จะไม่ถูกต้องเพราะจะสร้างวันที่และเวลาที่ไม่ได้เป็นเวลาท้องถิ่น ใช้datetime.datetime.fromtimestamp(ts,datetime.timezone.utc)
แทน สิ่งนี้สร้างวันที่และเวลาที่รับรู้ของเขตเวลาซึ่งแสดงถึงอินสแตนซ์เดียวกับเวลาประทับ
naive_dt.astimezone()
จะไม่มีอยู่จริงโดยปริยายbytes.encode()
ไม่มีอยู่ใน Python 3 อีกต่อไปมันเป็นความจริงที่เป็นประโยชน์ต่อการทำงานกับเวลา UTC ภายในหลายกรณี มีหลายสิ่งหลายอย่างที่สามารถพูดได้เกี่ยวกับโมดูลวันที่และเวลา (ฉันตอบคำถามมากพอที่จะรับตราทอง) ส่วนใหญ่อยู่นอกขอบเขตสำหรับคำถาม: สิ่งที่time.time()
ส่งกลับ
ในที่สุดฉันก็ตัดสินให้:
>>> import time
>>> time.mktime(time.gmtime())
1509467455.0
time.time()
ผลตอบแทนทศนิยม / ลอยเหมือน1574115250.818733
และมิลลิวินาทีตั้งแต่ยุค-เป็นได้อย่างง่ายดายint(time.time() * 1000)
เช่น1574115254915
ไม่มีสิ่งเช่น "ยุค" ในเขตเวลาที่เฉพาะเจาะจง ยุคมีการกำหนดไว้อย่างดีว่าเป็นช่วงเวลาที่เฉพาะเจาะจงดังนั้นหากคุณเปลี่ยนเขตเวลาเวลาก็จะเปลี่ยนไปเช่นกัน Jan 1 1970 00:00:00 UTC
โดยเฉพาะเวลานี้คือ ดังนั้นtime.time()
ส่งกลับจำนวนวินาทีตั้งแต่ยุค
การประทับเวลาจะเป็นเวลาเสมอใน utc แต่เมื่อคุณโทรdatetime.datetime.fromtimestamp
กลับจะให้เวลาในเขตเวลาท้องถิ่นของคุณตรงกับการประทับเวลานี้ดังนั้นผลลัพธ์ขึ้นอยู่กับสถานที่ของคุณ
>>> import time, datetime
>>> time.time()
1564494136.0434234
>>> datetime.datetime.now()
datetime.datetime(2019, 7, 30, 16, 42, 3, 899179)
>>> datetime.datetime.fromtimestamp(time.time())
datetime.datetime(2019, 7, 30, 16, 43, 12, 4610)
มีไลบรารีที่ดีที่arrow
มีพฤติกรรมแตกต่างกัน ในกรณีเดียวกันมันจะคืนค่าวัตถุเวลาของคุณด้วยเขตเวลา UTC
>>> import arrow
>>> arrow.now()
<Arrow [2019-07-30T16:43:27.868760+03:00]>
>>> arrow.get(time.time())
<Arrow [2019-07-30T13:43:56.565342+00:00]>