如何从日期范围获取日期时间列表
本文关键字:取日期 时间 列表 获取 范围 日期 | 更新日期: 2023-09-27 18:03:59
我有日期时间范围:
var _checkInYear = (from d in db.bookings select d.checkinyear).ToList();
var _checkInMonth = (from d in db.bookings select d.checkinmonth).ToList();
var _checkInDay = (from d in db.bookings select d.checkinday).ToList();
var _checkOutYear = (from d in db.bookings select d.checkoutyear).ToList();
var _checkOutMonth = (from d in db.bookings select d.checkoutmonth).ToList();
var _checkOutDay = (from d in db.bookings select d.checkoutday).ToList();
我如何从这个范围中得到DateTime
列表?例如,如果入住时间是2011年8月20日,退房时间是2011年8月23日,则需要将列表日期时间放入此范围内。
20/08/2011、21/08/2011 22/08/2011 23/08/2011。
DateTime checkIn = new DateTime(_checkInYear, _checkInMonth, _checkInDay);
DateTime checkOut = new DateTime(_checkOutYear, _checkOutMonth, _checkOutDay);
TimeSpan span = checkOut - checkIn;
List<DateTime> range = new List<DateTime>();
for(int day = 0; day <= span.Days; day++)
{
range.Add(checkIn.AddDays(day));
}
例子: http://www.ideone.com/BxmkF
算法很简单,得到你的起点,递增直到你到达终点。
var startDate = new DateTime(checkInYear, checkInMonth, checkInDay);
var endDate = new DateTime(checkOutYear, checkOutMonth, checkOutDay);
var givenDate = startDate;
var datesInRange = new List<DateTime>();
while (givenDate <= startDate)
{
datesInRange.Add(givenDate);
givenDate = givenDate.AddDays(1);
}
// work with / return datesInRange
如果您可以获得入住和退房日期,那么您可以使用DateTime
的扩展方法来获取列表:
public static class ExtensionMethods
{
static IEnumerable<DateTime> GetDateRange(this DateTime d, DateTime e)
{
var t=d;
do
{
yield return t;
t=t.AddDays(1);
}while(t<e);
}
}
然后像这样使用:
var dateList = checkIn.GetDateRange(checkOutDate);
在Linqpad测试
如果您手头有两个日期,您最好的选择是简单地使用for
或while
循环:
var dates = new List<DateTime>();
var curDate = booking.CheckinDate;
while (curDate <= booking.CheckoutDate)
{
dates.Add(curDate);
curDate = curDate.AddDays(1);
}
然而,我欣赏这可能是一个人为的例子,为问题的目的,但我担心你的示例代码不会做你想要的。如果是这种情况,就不要再读下去了,我只是想强调一下,这样你可能会更好:
var booking = (from b in data.Bookings
where b.BookingId = bookingId
select new BookingSearchResult // You have to create this class
{
CheckinDate = new DateTime(b.CheckinYear, b.CheckinMonth, b.CheckinDay),
CheckoutDate = new DateTime(b.CheckoutYear, b.CheckoutMonth, b.CheckoutDay)
}).SingleOrDefault();
这个问题有点老,但我认为我们应该这样做:
DateTime checkIn = new DateTime(_checkInYear, _checkInMonth, _checkInDay);
DateTime checkOut = new DateTime(_checkOutYear, _checkOutMonth, _checkOutDay);
List<DateTime> allDates = new List<DateTime> ();
for (DateTime date = checkIn; date <= checkOut; date = date.AddDays(1))
allDates.Add(date);