0

別の間隔の間で日付範囲が間違っているかどうかを確認するには、明確な心が必要です。何が起こっているかは次のとおりです。

DateTime[] dates = new DateTime[20];
dates[0] = Convert.ToDateTime(initial_date);
for (int i = 1; i <= 19; i++)
{
dates[i] = initial_date.AddYears(i);
}

だから私は20の日付を格納する配列を持っています. initial_date = 1/20/2012の場合、配列はdates[0] = 1/20/2012からdates[19] = 1/20/2031までになり、ユーザーが例1で2つの日付を選択したかどうかを確認したい/1/2013 と 1/1/2014 では、選択は配列の最初の要素 (dates[0]) と 2 番目の要素 (dates[1]) の間にあります。これまでのところ:

DateTime a1 = Convert.ToDateTime(vtable.Rows[0][0]);
DateTime a2 = Convert.ToDateTime(vtable.Rows[vtable.Rows.Count - 1][0]);
DateTime start = DateTime.MinValue;
DateTime end = DateTime.MaxValue;
for (int i = 0; i < 20; i++)
            {
                if (a1.CompareTo(dates[i]) >= 0)
                {
                    start = dates[i];
                    for (int j = 19; j > 0 ; j--)
                    {
                        if (a2.CompareTo(dates[j]) >= 0)
                        {
                            end = dates[j]; 
                            break;
                        }
                    }
                    break;
                }
            }

これは、ユーザーが配列の 1 つの要素の間にのみ収まる日付範囲を選択する時点まで機能しています。たとえば、選択範囲が 2012 年 1 月 30 日から 2012 年 5 月 30 日であれば、start = date[0] および end = date[0] です。しかし、最後にパッチを適用するよりもアルゴリズムを修正する方が良いと考えていますどうもありがとうございました

4

2 に答える 2

0
var rangeMax = dates.Max();
var rangeMin = dates.Min();

DateTime a1 = Convert.ToDateTime(vtable.Rows[0][0]);
DateTime a2 = Convert.ToDateTime(vtable.Rows[vtable.Rows.Count - 1][0]);

if ((a1 > rangeMin) && (a1 < rangeMax) && (a2 > rangeMin) && (a2 < rangeMax))
{
    //dates are in given range 
}
于 2012-06-03T15:20:38.023 に答える
0

開始日から終了日までのように、日付範囲をペアとして保存します。終了日は次の開始日 - 1 日です。

コード内の物事をより明確にします。

于 2012-06-03T15:35:05.783 に答える