Làm cách nào tôi có thể có được thời gian hiện tại tính bằng mili giây trong Python?
time.time()
có thể cung cấp độ chính xác kém hơn datetime.utcnow()
trên một số nền tảng và phiên bản python.
Làm cách nào tôi có thể có được thời gian hiện tại tính bằng mili giây trong Python?
time.time()
có thể cung cấp độ chính xác kém hơn datetime.utcnow()
trên một số nền tảng và phiên bản python.
Câu trả lời:
Đối với những gì tôi cần, đây là những gì tôi đã làm, dựa trên nhận xét của @samplebias ở trên:
import time
millis = int(round(time.time() * 1000))
print millis
Nhanh chóng. Cảm ơn tất cả, xin lỗi cho rắm não.
Để sử dụng lại:
import time
current_milli_time = lambda: int(round(time.time() * 1000))
Sau đó:
>>> current_milli_time()
1378761833768
round
? Có vẻ như int(time.time() * 1000)
là đủ?
.utcnow()
sử dụng GetSystemTimeAsFileTime()
trên CPython gần đây trên Windows . Sẽ không time.clock()
gọi ( QueryPerformanceCounter()
) giới thiệu nhiều tiếng ồn hơn nó có thể giảm? Xem độ chính xác không giống như độ chính xác .
time.time()
chỉ có thể đưa ra giải pháp cho lần thứ hai, cách tiếp cận ưa thích trong một phần nghìn giây là 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()
để tạo ra độ chính xác tốt hơn (có thể): (td.microseconds + (td.seconds + td.days * 86400) * 10**6) / 10**3
(với tính năng phân chia thực sự được bật) Hoặc nếu bạn muốn cắt bớt mili giây thì hãy sử dụng // 10**3
.
Từ phiên bản 3.7, bạn có thể sử dụng time.time_ns()
để có được thời gian trôi qua nano giây từ epoch. Vì vậy bạn có thể làm
ms = time.time_ns() // 1000000
để lấy thời gian tính bằng mili-giây dưới dạng số nguyên.
Nếu bạn muốn một phương thức đơn giản trong mã của bạn trả về mili giây với datetime:
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()
thay thế hoặc nếu bạn không cần thời gian tuyệt đối thì bạn có thể sử dụng time.monotonous()
. Lưu ý: có một sự khác biệt tinh tế do các số liệu điểm nổi giữa some_int + dt.microseconds/ 1000.0
và công thức ( ) / 10**3
với phân chia thực sự được kích hoạt. Xem công thức rõ ràng và liên kết total_seconds()
trong câu trả lời liên quan
Nếu bạn lo lắng về việc đo thời gian đã trôi qua, bạn nên sử dụng đồng hồ đơn điệu (python 3) . Đồng hồ này không bị ảnh hưởng bởi các cập nhật đồng hồ hệ thống như bạn sẽ thấy nếu một truy vấn NTP điều chỉnh thời gian hệ thống của bạn, chẳng hạn.
>>> import time
>>> millis = round(time.monotonic() * 1000)
Nó cung cấp thời gian tham chiếu tính bằng giây có thể được sử dụng để so sánh sau này để đo thời gian đã trôi qua.
Nếu bạn sử dụng mã của tôi (bên dưới), thời gian sẽ xuất hiện sau vài giây, sau đó, sau một thập phân, mili giây. Tôi nghĩ rằng có một sự khác biệt giữa Windows và Unix - vui lòng bình luận nếu có.
from time import time
x = time()
print(x)
kết quả của tôi (trên Windows) là:
1576095264.2682993
EDIT : Không có sự khác biệt :) Cảm ơn tc0nn
/usr/local/opt/python/bin/python3.7 scratch.py 1577212639.882543
python3 scratch.py 1577212763.9136133
Các phép nhân này đến 1000 trong một phần nghìn giây có thể là tốt để giải quyết hoặc làm cho một số điều kiện tiên quyết được chấp nhận. Nó có thể được sử dụng để lấp đầy một khoảng trống trong cơ sở dữ liệu của bạn mà không thực sự sử dụng nó. Mặc dù, đối với các tình huống thực tế đòi hỏi thời gian chính xác, cuối cùng nó sẽ thất bại. Tôi sẽ không đề nghị bất cứ ai sử dụng phương pháp này cho các hoạt động quan trọng đòi hỏi phải có hành động hoặc xử lý theo thời gian cụ thể.
Ví dụ: ping chuyến đi khứ hồi là 30-80ms ở Hoa Kỳ ... Bạn không thể làm tròn số đó và sử dụng nó một cách hiệu quả.
Ví dụ của riêng tôi yêu cầu các tác vụ ở mỗi giây, điều đó có nghĩa là nếu tôi làm tròn sau khi các tác vụ đầu tiên được trả lời, tôi vẫn sẽ phải chịu thời gian xử lý nhân với mỗi chu kỳ vòng lặp chính. Điều này kết thúc là một cuộc gọi chức năng tổng số cứ sau 60 giây. đó là ~ 1440 một ngày .. không quá chính xác.
Chỉ là một suy nghĩ cho những người tìm kiếm lý luận chính xác hơn ngoài việc giải quyết một khoảng cách cơ sở dữ liệu không bao giờ thực sự sử dụng nó.
Chỉ là một giải pháp khác sử dụng datetime
mô-đun cho Python 3.
datetime.datetime.timestamp(datetime.datetime.now())
import time; ms = time.time()*1000.0