2013-02-25 31 views
6

Tôi đang sử dụng python và muốn tính chênh lệch giữa hai lần.Tính khác biệt giữa hai lần trong python

Trên thực tế tôi đã có kịch bản để tính toán sự khác biệt giữa các đăng nhập và đăng xuất lần, ví dụ như trong các tổ chức có một số giới hạn đặc biệt đối với giờ làm việc, vì vậy nếu một người dùng đăng nhập vào 9:00 AM vào buổi sáng và nếu anh ta đăng xuất ở 6:00 PM vào buổi tối, chúng ta cần tính thời gian anh ta ở văn phòng (là 9 hours trong kịch bản hiện tại), nhưng tôi muốn làm điều này trong python, vì vậy bất kỳ ai cũng có thể cho tôi biết cách đạt được khái niệm trên tính toán sự khác biệt giữa thời gian đăng nhập và đăng xuất?

+0

Bạn đang tính toán sự khác biệt giữa hai xu * deltas *, không phải là hai điểm trong thời gian?!? –

+1

delta = thay đổi, bạn đang so sánh với những thay đổi trong thời gian – Gjordis

+0

k xin lỗi nhưng khái niệm của tôi là tính toán thời gian đăng nhập và thời gian đăng xuất thực sự – Fedrik

Trả lời

19
>>> start = datetime.datetime(year=2012, month=2, day=25, hour=9) 
>>> end = datetime.datetime(year=2012, month=2, day=25, hour=18) 
>>> diff = end - start 
>>> diff 
datetime.timedelta(0, 32400) 
>>> diff.total_seconds() 
32400 
>>> diff.total_seconds()/60/60 
9 
>>> 
+1

bạn có thể in 'str (dif)' thay vì diff.seconds/60/60 để có định dạng đẹp hơn. –

+1

Nếu bạn đăng nhập trong hơn một ngày, bạn sẽ muốn sử dụng 'diff.total_seconds()' –

+0

Cách chúng tôi có thể cung cấp giá trị giờ tại đây, ví dụ: người dùng đăng nhập lúc 9 giờ sáng và đăng xuất lúc 6 giờ chiều? – Fedrik

1

Bạn đang sử dụng các lớp sai để thể hiện thời gian ở địa điểm đầu tiên.

> import datetime 
> print datetime.datetime.now() - datetime.datetime(2013, 1, 1) 
55 days, 14:11:06.749378 

Các trở đối tượng là một timedelta. Nhưng sự khác biệt là tất nhiên được tính toán giữa các đối tượng datetime.

3

sử dụng divmod cho nhiệm vụ này

>>> start = datetime.datetime.utcnow() 
>>> end = datetime.datetime.utcnow() 
>>> divmod(end - start, 60) 
(0, 2.454) # (minutes, seconds) 

divmod sẽ cho

+0

divmod() là rất hữu ích để chuyển đổi thời gian giây trong thời gian cần thiết trong vài phút và hoặc giờ. –

+3

divmod không hỗ trợ các đối tượng datetime hoặc timedelta. Bạn cần sử dụng end.seconds và start.seconds –

2

Theo tôi @ trả lời Fabian có lẽ là tốt nhất. Nhưng liệu chúng ta có làm điều này khó hơn là phải không?

Bạn có cần tính toán theo ngày, tháng, năm không?

Nếu bạn đang tạo điều này, sẽ không dễ dàng hơn khi chỉ sử dụng đại diện timesec?

Khi một thông tin đăng nhập người dùng trong:

user_login_time = time.time() 

Khi người dùng đã xem lại:

time_difference = time.time() - user_login_time 

Sau đó kiểm tra để xem nếu time_difference là trên XXXX giây? bây giờ tôi là giả sử rằng bạn sẽ chỉ kiểm tra xem người dùng chưa đăng nhập XX phút hay xx giờ?

Nếu không, tôi sẽ nhấn mạnh rằng câu trả lời của @ Fabian sẽ là tốt nhất, nếu bạn đang xem xét phân tích chuỗi ngày tháng hoặc cần phải thực hiện các hàm thời gian/ngày khác với dữ liệu.

Tôi cũng sẽ nhấn mạnh rằng nếu bạn sử dụng phương pháp này, để tạo các hằng số cho thời gian hoặc đảm bảo nhận xét chúng, để làm cho nó dễ đọc hơn.

Nhưng nếu bạn chỉ đơn giản là cố gắng tìm hiểu xem người dùng đã ở trong vòng 30 phút qua chưa, điều này có thể dễ dàng hơn.

Các vấn đề liên quan