我正在尝试计算两个给定日期之间的银行假日数量,例如31/10/2019 10:00:00和01/11/2019 08:00:00假设01/11/2019是银行假日。我应该以分钟为单位的总和为480分钟以得到银行假日差额。我正在使用以下代码,如果给定日期之一与银行休假日期相同,则我的代码返回1440,这是错误的,有人可以建议如何实现这一点。谢谢
DateTime firstDay = new DateTime(2019,10,31,0);
DateTime lastDay = new DateTime(2019,11,1,8,0);
public static int CountOfBusinessClosures(DateTime firstDay,DateTime lastDay,IOrganizationService service)
{
// firstDay = firstDay.Date;
// lastDay = lastDay.Date;
var count = 0;
var businessClosuresdate = new DateTime(2019,0);//GetBusinessClosureCalendarRules(service);
// Count the number of bank holidays in between the given dates
if (firstDay <= businessClosuresdate && businessClosuresdate <= lastDay)
{
count++;
}
return count;
}
OR
public static double CountOfBusinessClosures2(DateTime firstDay,IOrganizationService service)
{
var firstDay1 = firstDay.Date;
var lastDay1 = lastDay.Date;
var count = 0;
double t = 0;
// var businessClosures = GetBusinessClosureCalendarRules(service);
// Count the number of bank holidays during the time interval
// foreach (var closure in businessClosures)
// {
var startDate = 01/11/2019 00:00:00 //(DateTime)closure["effectiveintervalstart"];
var endDate = 02/11/2019 00:00:00 // (DateTime)closure["effectiveintervalend"];
DateTime bh1 = startDate.Date;
if (firstDay1 <= bh1 && bh1 <= lastDay1)
{
// count++;
if (firstDay.Date < startDate.Date && startDate.Date != endDate.Date)
{
t += 1440; // 24h * 60 min
}
else
{
double difference;
difference = (endDate - startDate).TotalMinutes;
difference = difference - (firstDay - startDate).TotalMinutes;
t += difference;
}
}
// }
return t;
}
private static IEnumerable<Entity> GetBusinessClosureCalendarRules(IOrganizationService service)
{
// Get Organization Business Closure Calendar Id
var organization = service.Retrieve("organization",_orgId,new ColumnSet("businessclosurecalendarid"));
var query = new QueryExpression("calendar")
{
ColumnSet = new ColumnSet(true),Criteria = new FilterExpression()
};
// Add condition to get Get Calander where CalanderId is equal to Organization's businessclosurecalendarid
query.Criteria.AddCondition(new ConditionExpression("calendarid",ConditionOperator.Equal,organization["businessclosurecalendarid"].ToString()));
// Get Calendar
var businessClosureCalendar = service.RetrieveMultiple(query).Entities[0];
return businessClosureCalendar == null || businessClosureCalendar.GetattributeValue<EntityCollection>("calendarrules") == null ? null : businessClosureCalendar.GetattributeValue<EntityCollection>("calendarrules").Entities;
}