ฉันจะรับเวลาปัจจุบันเป็นมิลลิวินาทีใน Python ได้อย่างไร
time.time()
อาจให้ความแม่นยำที่ต่ำกว่าdatetime.utcnow()
ในบางแพลตฟอร์มและรุ่นหลาม
ฉันจะรับเวลาปัจจุบันเป็นมิลลิวินาทีใน Python ได้อย่างไร
time.time()
อาจให้ความแม่นยำที่ต่ำกว่าdatetime.utcnow()
ในบางแพลตฟอร์มและรุ่นหลาม
คำตอบ:
สำหรับสิ่งที่ฉันต้องการนี่คือสิ่งที่ฉันทำตามความคิดเห็นของ @samplebias ด้านบน:
import time
millis = int(round(time.time() * 1000))
print millis
Quick'n'easy ขอบคุณทุกคนขอโทษสำหรับผายลมในสมอง
สำหรับการใช้ซ้ำ:
import time
current_milli_time = lambda: int(round(time.time() * 1000))
แล้ว:
>>> current_milli_time()
1378761833768
round
? ดูเหมือนint(time.time() * 1000)
จะเพียงพอหรือไม่
.utcnow()
ใช้GetSystemTimeAsFileTime()
ใน CPython ล่าสุดบน Windows จะไม่time.clock()
โทร ( QueryPerformanceCounter()
) แนะนำเสียงรบกวนมากกว่าที่จะลดหรือไม่ ดูความแม่นยำไม่ได้เป็นเช่นเดียวกับความถูกต้อง
time.time()
เพียง datetime
แต่อาจจะให้ความละเอียดที่สองวิธีที่แนะนำสำหรับมิลลิวินาทีคือ
from datetime import datetime
dt = datetime.now()
dt.microsecond
def TimestampMillisec64():
return int((datetime.datetime.utcnow() - datetime.datetime(1970, 1, 1)).total_seconds() * 1000)
.total_seconds()
การผลิต (อาจจะ) มีความแม่นยำที่ดีกว่า: (td.microseconds + (td.seconds + td.days * 86400) * 10**6) / 10**3
(มีส่วนจริงเปิดใช้งาน)// 10**3
หรือถ้าคุณต้องการที่จะตัดทอนมิลลิวินาทีแล้วใช้
จากรุ่น 3.7คุณสามารถใช้time.time_ns()
เพื่อรับเวลาเป็นวินาทีที่ผ่านมาจากยุคสมัย ดังนั้นคุณสามารถทำได้
ms = time.time_ns() // 1000000
เพื่อรับเวลาเป็น mili-seconds
เพียงแค่ตัวอย่างรหัส:
import time
timestamp = int(time.time()*1000.0)
เอาท์พุต: 1534343781311
อีกวิธีคือฟังก์ชั่นที่คุณสามารถฝังลงใน utils.py ของคุณเอง
import time as time_ #make sure we don't override time
def millis():
return int(round(time_.time() * 1000))
หากคุณต้องการวิธีการง่ายๆในรหัสของคุณที่ส่งกลับมิลลิวินาทีด้วยวันที่และเวลา:
from datetime import datetime
from datetime import timedelta
start_time = datetime.now()
# returns the elapsed milliseconds since the start of the program
def millis():
dt = datetime.now() - start_time
ms = (dt.days * 24 * 60 * 60 + dt.seconds) * 1000 + dt.microseconds / 1000.0
return ms
start_time
= datetime (1970,1,1)
.utcnow()
time.monotonous()
หมายเหตุ: มีความแตกต่างเล็กน้อยเนื่องจากการคำนวณเลขทศนิยมระหว่างsome_int + dt.microseconds/ 1000.0
และสูตร( ) / 10**3
ที่เปิดใช้งานการหารจริง ดูสูตรที่ชัดเจนและลิงก์สำหรับtotal_seconds()
คำตอบที่เกี่ยวข้อง
วิธีที่ง่ายที่สุดที่ฉันพบเพื่อให้ได้เวลา UTC ปัจจุบันในหน่วยมิลลิวินาทีคือ:
# timeutil.py
import datetime
def get_epochtime_ms():
return round(datetime.datetime.utcnow().timestamp() * 1000)
# sample.py
import timeutil
timeutil.get_epochtime_ms()
หากคุณกำลังกังวลเกี่ยวกับการวัดระยะเวลาที่ผ่านไปคุณควรใช้นาฬิกาเนื่อง (หลาม 3) นาฬิกานี้ไม่ได้รับผลกระทบจากการอัพเดตนาฬิการะบบเช่นคุณจะเห็นว่าแบบสอบถาม NTP ปรับเวลาระบบของคุณหรือไม่
>>> import time
>>> millis = round(time.monotonic() * 1000)
ให้เวลาอ้างอิงเป็นวินาทีที่สามารถใช้เปรียบเทียบในภายหลังเพื่อวัดเวลาที่ผ่านไป
หากคุณใช้รหัสของฉัน (ด้านล่าง) เวลาจะปรากฏขึ้นในไม่กี่วินาทีจากนั้นหลังจากทศนิยมเป็นมิลลิวินาที ฉันคิดว่ามีความแตกต่างระหว่าง Windows และ Unix - โปรดแสดงความคิดเห็นหากมี
from time import time
x = time()
print(x)
ผลลัพธ์ของฉัน (บน Windows) คือ:
1576095264.2682993
แก้ไข : ไม่มีความแตกต่าง :) ขอบคุณ tc0nn
/usr/local/opt/python/bin/python3.7 scratch.py 1577212639.882543
python3 scratch.py 1577212763.9136133
การคูณเหล่านี้เป็น 1,000 เป็นมิลลิวินาทีอาจเหมาะสมสำหรับการแก้ปัญหาหรือทำให้มีข้อกำหนดเบื้องต้นบางอย่างที่ยอมรับได้ อาจใช้เพื่อเติมช่องว่างในฐานข้อมูลของคุณซึ่งไม่ได้ใช้จริง ๆ แม้ว่าสำหรับสถานการณ์จริงที่ต้องใช้เวลาที่แม่นยำในที่สุดมันก็จะล้มเหลว ฉันจะไม่แนะนำให้ใครใช้วิธีนี้สำหรับการปฏิบัติภารกิจที่สำคัญซึ่งต้องการการดำเนินการหรือการประมวลผลตามเวลาที่กำหนด
ตัวอย่างเช่น: การส่ง Ping ไปกลับเป็นเวลา 30-80ms ในสหรัฐอเมริกา ... คุณไม่สามารถปัดมันและใช้มันอย่างมีประสิทธิภาพ
ตัวอย่างของฉันเองต้องการงานทุกวินาทีซึ่งหมายความว่าถ้าฉันปัดเศษขึ้นหลังจากงานแรกที่ตอบกลับฉันจะยังคงต้องใช้เวลาในการประมวลผลคูณทุกรอบวนรอบหลัก สิ่งนี้กลายเป็นการเรียกใช้ฟังก์ชันทั้งหมดในทุก ๆ 60 วินาที นั่นคือ ~ 1440 ต่อวัน .. ไม่แม่นยำเกินไป
แค่ความคิดสำหรับคนที่กำลังมองหาเหตุผลที่แม่นยำมากกว่าการแก้ช่องว่างฐานข้อมูลที่ไม่ได้ใช้จริง ๆ
อีกโซลูชันที่ใช้datetime
โมดูลสำหรับ Python 3
datetime.datetime.timestamp(datetime.datetime.now())
import time; ms = time.time()*1000.0