2010-10-13 42 views
15

Tôi có hai đối tượng thời gian.Sự khác biệt về thời gian Python

Ví dụ

time.struct_time(tm_year=2010, tm_mon=9, tm_mday=24, tm_hour=19, tm_min=13, tm_sec=37, tm_wday=4, tm_yday=267, tm_isdst=-1) 

time.struct_time(tm_year=2010, tm_mon=9, tm_mday=25, tm_hour=13, tm_min=7, tm_sec=25, tm_wday=5, tm_yday=268, tm_isdst=-1) 

Tôi muốn có sự khác biệt của hai. Làm thế nào tôi có thể làm điều đó? Tôi chỉ cần phút và giây, cũng như thời lượng của hai giây đó.

+1

Nhìn vào: http://stackoverflow.com/questions/1697815/how-do-you-convert-a-python-time-struct-time-object-into-a-datetime-object – shahjapan

+0

câu trả lời nhận biết múi giờ : [Tìm nếu 24 giờ đã trôi qua giữa thời gian biểu - Python] (http://stackoverflow.com/a/26313848/4279) – jfs

Trả lời

20

Time trường hợp không hỗ trợ thao tác trừ. Cho rằng một trong những cách để giải quyết này sẽ được chuyển đổi thời gian để giây kể từ kỷ nguyên và sau đó tìm ra sự khác biệt, sử dụng:

>>> t1 = time.localtime() 
>>> t1 
time.struct_time(tm_year=2010, tm_mon=10, tm_mday=13, tm_hour=10, tm_min=12, tm_sec=27, tm_wday=2, tm_yday=286, tm_isdst=0) 
>>> t2 = time.gmtime() 
>>> t2 
time.struct_time(tm_year=2010, tm_mon=10, tm_mday=13, tm_hour=4, tm_min=42, tm_sec=37, tm_wday=2, tm_yday=286, tm_isdst=0) 

>>> (time.mktime(t1) - time.mktime(t2))/60 
329.83333333333331 
+2

Trong python 3, hàm mktime trả về số giây kể từ thời đại Epoch và do đó không cần chia cho 60. –

+0

thời gian cục bộ có thể không rõ ràng do đó 'mktime()' có thể trả về kết quả sai (50% cơ hội trong quá trình chuyển đổi cuối DST, hoặc chỉ sai cho ngày trước nếu cơ sở dữ liệu tz lịch sử không được sử dụng). Không đúng để vượt qua thời gian UTC (kết quả của 'gmtime()') trừ khi múi giờ địa phương là UTC. – jfs

+0

@AdamOren: 'mktime()' * luôn * trả về "giây sicne kỷ nguyên". '/ 60' trả về số phút khi OP hỏi. Tôi sẽ sử dụng 'phút, giây = divmod (giây, 60)' để lấy phút, giây riêng biệt hoặc sử dụng 'timedelta' như [@jweyrich đề xuất] (http://stackoverflow.com/a/3920862/4279). – jfs

2

Bạn có thể sử dụng time.mktime(t) với đối tượng struct_time (được chuyển thành "t") để chuyển đổi nó thành giá trị dấu chấm động "giây kể từ thời điểm". Sau đó, bạn có thể trừ những người để có được sự khác biệt trong vài giây, và chia cho 60 để có được sự khác biệt trong vài phút.

16
>>> t1 = time.mktime(time.strptime("10 Oct 10", "%d %b %y")) 
>>> t2 = time.mktime(time.strptime("15 Oct 10", "%d %b %y")) 
>>> print(datetime.timedelta(seconds=t2-t1)) 
5 days, 0:00:00 
+2

['mktime()' có thể trả lại kết quả sai] (http://stackoverflow.com/a/26313848/4279) – jfs

+0

Không hoạt động với Python 3.6: 'errorMessage:" loại toán hạng không được hỗ trợ cho -: 'time.struct_time' và 'time.struct_time' – Suncatcher

+0

@Suncatcher huh? Nó hoạt động tốt với python3 - xem http://imgur.com/a/3rbhW – jweyrich

2

Có một cách khác để tìm sự khác biệt thời gian giữa hai ngày bất kỳ (không tốt hơn so với giải pháp trước, tôi đoán):

>>> import datetime 
>>> dt1 = datetime.datetime.strptime("10 Oct 10", "%d %b %y") 
>>> dt2 = datetime.datetime.strptime("15 Oct 10", "%d %b %y") 
>>> (dt2 - dt1).days 
5 
>>> (dt2 - dt1).seconds 
0 
>>> 

Nó sẽ tạo sự khác biệt về ngày hoặc giây hoặc kết hợp. Kiểu cho (dt2 - dt1) là datetime.timedelta. Nhìn vào số library để biết thêm chi tiết.

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