c# - 计算两个给定日期之间的银行假期并以分钟为单位显示差异
问题描述
我正在尝试计算两个给定日期之间的银行假期数量,例如 31/10/2019 10:00:00 和 01/11/2019 08:00:00 假设 01/11/2019 是银行假期。我应该以分钟为单位得到银行假日的差异,总共 480 分钟。我正在使用以下代码,如果给定日期与银行假日在同一日期,那么我的代码返回 1440,这是错误的,有人可以建议如何实现这一点。谢谢
DateTime firstDay = new DateTime(2019, 10, 31, 10, 0, 0);
DateTime lastDay = new DateTime(2019, 11, 1, 8, 0, 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, 11, 1, 0, 0, 0);//GetBusinessClosureCalendarRules(service);
// Count the number of bank holidays in between the given dates
if (firstDay <= businessClosuresdate && businessClosuresdate <= lastDay)
{
count++;
}
return count;
}
或者
public static double CountOfBusinessClosures2(DateTime firstDay, DateTime lastDay, 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;
}
解决方案
@Bellam 试试这个,看看它是否适合您的需求:
// Unit Test Class
[TestClass]
public class UnitTest1
{
[TestMethod]
public void C58840237T01()
{
DateTime firstDay = new DateTime(2019, 10, 31, 0, 0, 0);
DateTime lastDay = new DateTime(2019, 11, 1, 0, 0, 0);
double totalMinutesBusinessIsClosed = C58840237.MinutesBusinessIsClosed(firstDay, lastDay);
Assert.IsTrue(totalMinutesBusinessIsClosed == 480);
}
}
// Sample Class
public class C58840237
{
public static double MinutesBusinessIsClosed(DateTime firstDay, DateTime lastDay)
{
double t = 0;
// Holiday 01
var h01Start = Convert.ToDateTime("11/01/2019 08:00:00");
var h01End = Convert.ToDateTime("11/01/2019 16:00:00");
// Holiday is in range
if (firstDay <= h01Start && h01Start >= lastDay)
{
return (h01End - h01Start).TotalMinutes;
}
return t;
}
}
编辑:我意识到我们的日期时间格式不同,但这很容易调整。
推荐阅读
- vue.js - nuxt.js 获取数据到 vuetify 表
- arrays - 设置一次时,二维数组中的值出现两次
- google-sheets - 根据Google表格中的单元格值将行复制到另一个表格
- python - 是否可以将 numpy 数组和采样率发送到微软语音到文本而不是将其保存到 wav 文件?
- angular - 如何将数组修补到formarray
- php - 如何在 laravel 8 中使用预先存在的表进行自定义身份验证?
- mysql - MySql如何获取2个日期之间的数据,如果为空返回0
- c# - 继承到 c# 扩展方法的 Swift 扩展?
- ios - 如何嗅探以太网 iOS 流量
- docker - VueJS Nginx 和 docker 设置 - 本地 ERR_EMPTY_RESPONSE