我正在尝试计算两个LocalDateTime
值之间的时间量并排除特定日期(在此示例中,它是银行假期)。
var bankHolidays = new[] { new LocalDate(2013, 12, 25), new LocalDate(2013, 12, 26) };
var localDateTime1 = new LocalDateTime(2013, 11, 18, 10, 30);
var localDateTime2 = new LocalDateTime(2013, 12, 29, 10, 15);
var differenceBetween = Period.Between(localDateTime1, localDateTime2, PeriodUnits.Days | PeriodUnits.HourMinuteSecond);
如您所料,该differenceBetween
值显示两个日期之间的天数/小时/分钟/秒数。
我可以从开始日期开始检查每一天,看看bankHolidays
集合是否包含该日期,例如
var bankHolidays = new[] { new LocalDate(2013, 12, 25), new LocalDate(2013, 12, 26) };
var localDateTime1 = new LocalDateTime(2013, 11, 18, 10, 30);
var localDateTime2 = new LocalDateTime(2013, 12, 29, 10, 15);
var differenceBetween = Period.Between(localDateTime1, localDateTime2, PeriodUnits.Days | PeriodUnits.HourMinuteSecond);
var london = DateTimeZoneProviders.Tzdb["Europe/London"];
for (var i = 1; i < differenceBetween.Days; ++i)
{
var x = localDateTime1.InZoneStrictly(london) + Duration.FromStandardDays(i);
if (bankHolidays.Any(date => date == x.Date))
{
//subtract one day for the period.
}
}
我觉得我遗漏了一些明显的东西,应该有一个更简单的方法,有没有更简单的方法可以找到两个日期之间的时间段,同时排除某些日期?
我还需要在此排除项中包括周末,显而易见的方法似乎是在检查银行假期的同时检查周末的星期几,但这似乎不是最好/正确的处理方式。