Oh nó thực sự dễ dàng để lặp qua ngày - đó không phải là vấn đề gì cả:
// I'm assuming you want <= to give an *inclusive* end date...
for (DateTime date = start; date <= end; date = date.AddDays(1))
{
// Do stuff with date
}
Bạn có thể dễ dàng viết một IEnumerable<DateTime>
quá, và sử dụng foreach
.
Tôi cố gắng tránh thực hiện các thao tác chuỗi tại đây nếu có thể - về cơ bản những ngày này không phải là chuỗi, vì vậy nếu bạn có thể làm việc trong miền có vấn đề càng nhiều càng tốt.
Tất nhiên, có thể có nhiều cách hiệu quả hơn lặp lại, nhưng chúng sẽ khó khăn hơn để có được quyền. Nếu vòng lặp là ổn về hiệu suất, tôi muốn dính vào đó.
Là một plugin nhanh cho dự án nguồn mở của riêng tôi, Noda Time có tập hợp các loại ngày càng đa dạng đại diện cho ngày và giờ - trong trường hợp này bạn sẽ sử dụng LocalDate
. Bằng cách đó bạn không phải lo lắng về những gì sẽ xảy ra nếu thời gian trong "bắt đầu" là muộn hơn thời gian trong "kết thúc" vv Mặt khác, Noda Thời gian là không thực sự hoàn thành được ... các bit bạn cần cho điều này đã sẵn sàng và sẽ hoạt động tốt, nhưng có thể API vẫn có thể thay đổi trong tương lai.
EDIT: Nếu bạn làm cần phải lặp qua ngày thường xuyên, bạn có thể muốn một cái gì đó giống như phương pháp này mở rộng (đặt nó trong một lớp tĩnh top-level phi generic):
public static IEnumerable<DateTime> To(this DateTime start, DateTime end)
{
Date endDate = end.Date;
for (DateTime date = start.Date; date <= endDate; date = date.AddDays(1))
{
yield return date;
}
}
Sau đó:
foreach (DateTime date in start.To(end))
{
...
}
Nguồn
2011-06-30 16:14:33
một O tốt hơn (1) giải pháp có thể được tìm thấy ở đây: stackoverflow.com/questions/1044688 –