如何计算两个日期之间的假期 C#
How to count number Holidays between 2 dates C#
如何计算数据库中 2 天之间的假期数
我已经计算了工作日的天数,但我如何减去工作日来计算 2 天之间的假期天数。
假设我有一个 Holidays
table 和
- 万圣节 11-01
- 圣诞节 12-25
日期:
- 开始日期 = 10-25
- 结束日期 = 01-30
答案应该是:工作日 - 2 个日期之间的假期数;
这是我的代码:
public static void GetBusinessDays(DateTime startD, DateTime endD)
{
double calcBusinessDays =
1 + ((endD - startD).TotalDays * 5 -
(startD.DayOfWeek - endD.DayOfWeek) * 2) / 7;
if (endD.DayOfWeek == DayOfWeek.Saturday) calcBusinessDays--;
if (startD.DayOfWeek == DayOfWeek.Sunday) calcBusinessDays--;
MessageBox.Show(" " + calcBusinessDays);
}
来自这个 link :Calculate the number of business days between two dates?
按钮:
private void button1_Click(object sender, EventArgs e)
{
GetBusinessDays(Convert.ToDateTime(metroDateTime1.Value.ToString("yyyy-MM-dd")), Convert.ToDateTime(metroDateTime2.Value.ToString("yyyy-MM-dd")));
}
PS: 我是 c# 新手
虽然只有
while (Start.Date <= End.Date)
{
if (Start.DayOfWeek == DayOfWeek.Saturday || Start.DayOfWeek == DayOfWeek.Sunday)
holidays++;
Start = Start.AddDays(1);
}
可以计算假期计数,但下面的代码更有效,因为我们已经知道每 7 天有 2 个假期,不必经过它,只检查 days % 7
(最多6天)节假日就够了
int days = (int)(End - Start).TotalDays + 1;
int holidays = days / 7 * 2;
int remain = days % 7;
DateTime dt = End.AddDays(-remain);
while (dt.Date <= End.Date)
{
if (dt.DayOfWeek == DayOfWeek.Saturday || dt.DayOfWeek == DayOfWeek.Sunday)
holidays++;
dt = dt.AddDays(1);
}
int year = Start.Year;
do
{
dt = new DateTime(year, 12, 25); //is chritsmass right?
if (dt >= Start && dt <= End && dt.DayOfWeek!=DayOfWeek.Saturday && dt.DayOfWeek != DayOfWeek.Sunday) holidays++;
dt = new DateTime(year, 7, 4); // 4th of july
if (dt >= Start && dt <= End && dt.DayOfWeek!=DayOfWeek.Saturday && dt.DayOfWeek != DayOfWeek.Sunday) holidays++;
dt = new DateTime(year, 10, 31); // holoween
if (dt >= Start && dt <= End && dt.DayOfWeek!=DayOfWeek.Saturday && dt.DayOfWeek != DayOfWeek.Sunday) holidays++;
year++;
} while (year <= End.Year);
int businessDays = days - holidays;
如何计算数据库中 2 天之间的假期数
我已经计算了工作日的天数,但我如何减去工作日来计算 2 天之间的假期天数。
假设我有一个 Holidays
table 和
- 万圣节 11-01
- 圣诞节 12-25
日期:
- 开始日期 = 10-25
- 结束日期 = 01-30
答案应该是:工作日 - 2 个日期之间的假期数;
这是我的代码:
public static void GetBusinessDays(DateTime startD, DateTime endD)
{
double calcBusinessDays =
1 + ((endD - startD).TotalDays * 5 -
(startD.DayOfWeek - endD.DayOfWeek) * 2) / 7;
if (endD.DayOfWeek == DayOfWeek.Saturday) calcBusinessDays--;
if (startD.DayOfWeek == DayOfWeek.Sunday) calcBusinessDays--;
MessageBox.Show(" " + calcBusinessDays);
}
来自这个 link :Calculate the number of business days between two dates?
按钮:
private void button1_Click(object sender, EventArgs e)
{
GetBusinessDays(Convert.ToDateTime(metroDateTime1.Value.ToString("yyyy-MM-dd")), Convert.ToDateTime(metroDateTime2.Value.ToString("yyyy-MM-dd")));
}
PS: 我是 c# 新手
虽然只有
while (Start.Date <= End.Date)
{
if (Start.DayOfWeek == DayOfWeek.Saturday || Start.DayOfWeek == DayOfWeek.Sunday)
holidays++;
Start = Start.AddDays(1);
}
可以计算假期计数,但下面的代码更有效,因为我们已经知道每 7 天有 2 个假期,不必经过它,只检查 days % 7
(最多6天)节假日就够了
int days = (int)(End - Start).TotalDays + 1;
int holidays = days / 7 * 2;
int remain = days % 7;
DateTime dt = End.AddDays(-remain);
while (dt.Date <= End.Date)
{
if (dt.DayOfWeek == DayOfWeek.Saturday || dt.DayOfWeek == DayOfWeek.Sunday)
holidays++;
dt = dt.AddDays(1);
}
int year = Start.Year;
do
{
dt = new DateTime(year, 12, 25); //is chritsmass right?
if (dt >= Start && dt <= End && dt.DayOfWeek!=DayOfWeek.Saturday && dt.DayOfWeek != DayOfWeek.Sunday) holidays++;
dt = new DateTime(year, 7, 4); // 4th of july
if (dt >= Start && dt <= End && dt.DayOfWeek!=DayOfWeek.Saturday && dt.DayOfWeek != DayOfWeek.Sunday) holidays++;
dt = new DateTime(year, 10, 31); // holoween
if (dt >= Start && dt <= End && dt.DayOfWeek!=DayOfWeek.Saturday && dt.DayOfWeek != DayOfWeek.Sunday) holidays++;
year++;
} while (year <= End.Year);
int businessDays = days - holidays;