gpt4 book ai didi

c# - 使用 Nodatime 从期间中排除日期

转载 作者:太空狗 更新时间:2023-10-30 01:20:11 24 4
gpt4 key购买 nike

我正在尝试计算两个 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.
}
}

我觉得我遗漏了一些明显的东西,应该有一个更简单的方法,有没有更简单的方法来查找两个日期之间的时间段同时排除某些日期?

我还需要将周末也包括在此排除项中,显而易见的方法似乎是在检查银行假期的同时检查周末是星期几,但这似乎不是处理它的最佳/正确方法.

最佳答案

I feel like I'm missing some obvious and there should be an easier method, is there a simpler way to find a period between two dates whilst excluding certain dates?

好吧,计算日期到日期范围内的银行假日数量相对容易:

  • 按时间顺序对所有银行假期进行排序
  • 使用二进制搜索找出开始日期在集合中的位置
  • 使用二进制搜索找出结束日期在集合中的位置
  • 从一个索引中减去另一个索引以找出该范围内的条目数
  • 使用 Period.Between 计算整个周期,就像您已经在做的那样
  • 从范围内的总天数中减去范围内的条目数

需要注意的是开始和/或结束日期可能是银行假日。有很多可能出现偏差错误,但通过一组良好的单元测试应该没问题。

或者,如果您的银行假期相对较少,您可以使用:

var period = Period.Between(start, end,
PeriodUnits.Days | PeriodUnits.HourMinuteSecond);
var holidayCount = holidays.Count(x => x >= start && x <= end);
period = period - Period.FromDays(holidayCount);

关于c# - 使用 Nodatime 从期间中排除日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20045730/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com