/ / c#Web app週末と祝日を除いて営業日数を取得する方法 - c#、asp.net

C#Webアプリケーション週末と祝日を除外する就業日数を取得する方法 - c#、asp.net

背景情報

ちょうどC#を学ぶために始めて、私は2つの日付の間の稼働日の数を計算するシンプルなWebアプリケーションを構築しようとしています。

The UI of the web app

ここに画像の説明を入力

基本的なロジックは、ユーザーが日付(つまり、01/05/2018)を入力してbutton.Itをクリックすると、合計就業日数を計算します(週末と祝日は除外します)。

問題は今計算が正確ではない、つまり23/05/2018と31/05/2018の間に6が表示され、7日間とすべきです。そして、それは計算中に日付を考慮に入れません

namespace testtest
{
public partial class First : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}


//on btn click
protected void Button1_Click(object sender, EventArgs e)
{


string dt = TextBox1.Text;
DateTime dtDDMMYYYY = ParseDate(dt);


string dt2 = TextBox2.Text;
DateTime dtDDMMYYYY2 = ParseDate(dt2);

List<DateTime> list = new List<DateTime> {
DateTime.ParseExact("04/05/2018", "dd/MM/yyyy",
CultureInfo.InvariantCulture) };

DaysLeft(dtDDMMYYYY, dtDDMMYYYY2, true, list);
}


public DateTime ParseDate(string date)
{
DateTimeFormatInfo dateFormatProvider = new DateTimeFormatInfo();
dateFormatProvider.ShortDatePattern = "dd/MM/yyyy";
return DateTime.Parse(date, dateFormatProvider);
}



public int DaysLeft(DateTime startDate, DateTime endDate, Boolean
excludeWeekends, List<DateTime> excludeDates)
{


int count = 0;
for (DateTime index = startDate; index < endDate; index =
index.AddDays(1))
{
if (excludeWeekends && index.DayOfWeek != DayOfWeek.Sunday &&
index.DayOfWeek != DayOfWeek.Saturday)
{
bool excluded = false; ;
for (int i = 0; i < excludeDates.Count; i++)
{
if (index.Date.CompareTo(excludeDates[i].Date) == 0)
{
excluded = true;
break;
}
}

if (!excluded)
{
count++;
}
}
}
result.Text = count.ToString();
return count;
}


}

}

回答:

回答№1は5

複雑にしないでおく

public int DaysLeft(DateTime startDate, DateTime endDate, Boolean excludeWeekends, List<DateTime> excludeDates) {
int count = 0;
for (DateTime index = startDate; index <= endDate; index = index.AddDays(1)) {
if (excludeWeekends && (index.DayOfWeek == DayOfWeek.Sunday || index.DayOfWeek == DayOfWeek.Saturday))
continue;

if (excludeDates.Contains(index.Date))
continue;

count++;
}
return count;
}

日付が週末で excludeWeekends フラグが立てられ、日付が含まれている場合は次の日付に進みます excludeDates 続ける、そうでなければ日を数える。