20

営業日と営業時間内に実行する必要があるアプリケーションがあります。

アプリケーション構成で、開始時刻を形式で設定しました

Monday-Friday
9:00AM-5:30PM

さて、現在の日が日の境界内にあるかどうかを確認する方法に問題があります(時間は簡単です-時間の解析DateTime.ParseExactと単純な分岐で十分です)が、日を解析する方法がわかりません。

私は試してみました:

DayOfWeek day = DateTime.Now.DayOfWeek;
if (day >= (DayOfWeek)Enum.Parse(typeof(DayOfWeek), sr.start_day) &&
    day <= (DayOfWeek)Enum.Parse(typeof(DayOfWeek), sr.end_day))
{ /* OK */ }

sr.start_dayそしてsr.end_day文字列です

しかし、問題は週末のテスト中に発生しました - どうやら ではDayOfWeek enum、日曜日が週の最初の日です ( MSDN ページのコメントを参照)

私は現在のコードでいくつかの体操を行うことができると思いますが、利用可能な最も読みやすいコードを探しています.

編集 誤解して申し訳ありません-営業日は月曜日から金曜日ではありません-構成ファイルで文字列として定義されており、金曜日から土曜日でもかまいません-元のコードが壊れます。

4

10 に答える 10

15
if ((day >= DayOfWeek.Monday) && (day <= DayOfWeek.Friday))
{
    // action
}
于 2012-07-15T19:42:31.430 に答える
12

私の最初の質問に対するHans Passantのコメントから:

開始日よりも短い場合は、終了日に 7 を追加します。同様に、開始日よりも少ない場合は、日に 7 を追加します。

DayOfWeek day = DateTime.Now.DayOfWeek;
DayOfWeek start_day = (DayOfWeek)Enum.Parse(typeof(DayOfWeek), sr.start_day);
DayOfWeek end_day = (DayOfWeek)Enum.Parse(typeof(DayOfWeek), sr.end_day);

if (end_day < start_day)
    end_day += 7;

if (day < start_day)
    day += 7;

if (day >= start_day && day <= end_day)
{ 
   //Action
}
于 2012-07-15T20:30:11.983 に答える
0

特定の時間が 2 時間の間にあるかどうかを確認する同様のアプローチに従うこともできます。以下はアルゴリズムです

checkIfFallsInRange(index,start,end)

bool normalPattern = start <= end ;

if ( normalPattern)
   return index>=start && index<=end;
else
  return index>=start || index <=end;
于 2016-07-21T12:15:04.000 に答える
0

これは、問題に対するエレガントなソリューションです。他のプロジェクトに簡単にインポートできるクラスです。このコーディングにより、プログラマーはチェックする曜日を動的に割り当て、文字列配列としてクラスに渡すことができます。データは、データベースから取得することも、処理のためにこのクラスのインスタンスに渡すときにハードコーディングすることもできます。仕事を休んでいる場合は True の値を返し、その日に仕事をしている場合は False の値を返します。クラスの下に、実装の簡単な例を示しました。このクラスの特徴: 休日の動的な割り当て、比較する前に文字列を小文字に設定することによる単純なエラー ハンドラー、休日が常に同じとは限らない勤務スケジュールを持つデータベースとの容易な統合。ハードコードされた休日数として簡単に統合できます。

// The Class To Check If You're Off Work

class DayOffChecker
{
    public bool CheckDays(List<string> DaysOff)
    {
        string CurrentDay = DateTime.Now.DayOfWeek.ToString();
        CurrentDay.ToLower();
        foreach (string DayCheck in DaysOff)
        {
            DayCheck.ToLower();
            if (CurrentDay == DayCheck)
            {
                return (true);
            }
        }
        return (false);
    }
}

// Example usage code:

class Program
{
    List<string> DaysOff = List<string>();
    DaysOff.Add("Saturday");  // Add some values to our list.
    DaysOff.Add("Sunday");
    DayOffChecker CheckToday = new DayOffChecker();
    if(CheckToday.CheckDays(DaysOff))
    {
        Console.WriteLine("You're Off Today!!!");
    }
}
于 2015-12-13T02:09:59.633 に答える
-1

DayOfWeek 列挙を使用して、日付が日曜日か土曜日かを確認できます。http://msdn.microsoft.com/en-us/library/system.dayofweek.aspxこれがお役に立てば幸いです。

于 2012-07-15T19:46:34.880 に答える
-1

以下の行は「日曜日」を返します

string nameOfTheDay = DateTime.Now.ToString("dddd", new System.Globalization.CultureInfo("en-GB")).ToLower();

if(nameOfTheDay != "sunday" && nameOfTheDay != "saturday")
{
//Do Stuff
}
于 2012-07-15T19:48:56.333 に答える