Cách ngắn nhất để xem có bao nhiêu ngày đã trôi qua giữa hai ngày? Đây là những gì tôi đang làm bây giờ.Ngày giữa hai ngày trong Python
math.floor((b - a).total_seconds()/float(86400))
Cách ngắn nhất để xem có bao nhiêu ngày đã trôi qua giữa hai ngày? Đây là những gì tôi đang làm bây giờ.Ngày giữa hai ngày trong Python
math.floor((b - a).total_seconds()/float(86400))
Giả sử bạn đã theo nghĩa đen có hai đối tượng ngày, bạn có thể trừ một từ khác và truy vấn kết quả timedelta
object cho số ngày:
>>> from datetime import date
>>> a = date(2011,11,24)
>>> b = date(2011,11,17)
>>> a-b
datetime.timedelta(7)
>>> (a-b).days
7
Và nó hoạt động với datetimes quá - Tôi nghĩ rằng nó làm tròn xuống đến một ngày gần nhất:
>>> from datetime import datetime
>>> a = datetime(2011,11,24,0,0,0)
>>> b = datetime(2011,11,17,23,59,59)
>>> a-b
datetime.timedelta(6, 1)
>>> (a-b).days
6
Sự mát mẻ. Bằng cách nào đó tôi luôn luôn giả định "ngày" chỉ đề cập đến phần ngày của sự khác biệt. Vì vậy, ví dụ sự khác biệt giữa năm 2010 và 2011 sẽ là 0 ngày và 1 năm, nhưng hóa ra nó báo cáo 365 ngày như tôi muốn. – Bemmu
@Bemmu: ah vâng - Tôi nghĩ rằng 'timedelta' không báo cáo bất kỳ đơn vị nào lâu hơn ngày (mặc dù tôi có thể sai). –
Hãy thử:
(b-a).days
Tôi đã thử với b và một loại datetime.date
.
Bạn có nghĩa là ngày theo lịch đầy đủ hoặc nhóm 24 giờ?
Đối với chỉ đơn giản là 24 giờ, giả sử bạn đang sử dụng datetime Python, sau đó đối tượng timedelta đã có một ngày bất động sản:
days = (a - b).days
Đối ngày dương lịch, bạn sẽ cần phải làm tròn xuống đến một ngày gần nhất , và b đến ngày gần nhất, loại bỏ một phần ngày ở hai bên:
roundedA = a.replace(hour = 0, minute = 0, second = 0, microsecond = 0)
roundedB = b.replace(hour = 0, minute = 0, second = 0, microsecond = 0)
days = (roundedA - roundedB).days
vị trí tốt với sự khác biệt trong ngày lịch và 24 giờ. Một câu hỏi là tại sao bạn thêm 1 ngày. Tôi nghĩ rằng các công trình trên hoàn hảo mà không có nó. –
Đó là séc cho các ngày theo lịch. Nói A là 2013-06-18 lúc 16:00 và B là 2013-06-19 lúc 02:00; một ngày dương lịch đã trôi qua, nhưng (B - A) .ngày sẽ trở về số không vì đồng bằng chỉ là 10 giờ. – DNS
Đó là điểm tôi đang làm cho DNS của bạn trả về mã 2 vì bạn đã thêm một ngày khác. Nếu không thêm 1 ngày, nó sẽ trả về 1. Tại sao thêm một ngày? –
Tham khảo ý kiến của tôi về câu trả lời khác. Đây là cách tôi sẽ làm việc ra sự khác biệt trong ngày dựa trên 24 giờ và ngày lịch. thuộc tính days hoạt động tốt trong 24 giờ và chức năng hoạt động tốt nhất để kiểm tra lịch.
from datetime import timedelta, datetime
def cal_days_diff(a,b):
A = a.replace(hour = 0, minute = 0, second = 0, microsecond = 0)
B = b.replace(hour = 0, minute = 0, second = 0, microsecond = 0)
return (A - B).days
if __name__ == '__main__':
x = datetime(2013, 06, 18, 16, 00)
y = datetime(2013, 06, 19, 2, 00)
print (y - x).days # 0
print cal_days_diff(y, x) # 1
z = datetime(2013, 06, 20, 2, 00)
print (z - x).days # 1
print cal_days_diff(z, x) # 2
Chỉ là hai ngày hoặc chúng có bao gồm thông tin thời gian không? –
Ah - xem thêm http://stackoverflow.com/questions/151199/how-do-i-calculate-number-of-days-betwen-two-dates-using-python –