1

今日の日付に基づいて特定の日の最後の日付を計算したいという要件があります。たとえば、私はメソッドを持っています

DateTime GetDate(DateTime now, DayOfWeek dayOfWeek)
{
  //Logic goes here
}

例えば

  1. dayofWeek で金曜日を過ぎて、今日が月曜日の場合、最後の金曜日の日付が返されます。
  2. 金曜日を過ぎて今日が金曜日の場合、同じ日付が返されます。

条件:

  1. 数式を使用して日付を計算したいだけです。
  2. 何かを想定したり、ハードコーディングしたりしたくありません。
  3. if...else は使いたくない。
4

3 に答える 3

4

現在の曜日をターゲットの曜日と比較し、負の場合は折り返すことで、減算する日数を計算できます。

static DateTime GetDate(DateTime now, DayOfWeek dayOfWeek)
{
    // Number of days to subtract, e.g. 1 for "today is Friday, we want Thursday"
    // The ((...) + 7) % 7 part is to handle wrap-around for negative values.
    int daysDifference = ((now.DayOfWeek - dayOfWeek) + 7) % 7;
    return now.AddDays(-daysDifference);
}

または、Noda Time(「ちょうど日付」などのより明確な表現を可能にする私の日付/時刻API)を使用します。

static LocalDate GetDate(LocalDate today, IsoDayOfWeek dayOfWeek)
{
    return today.IsoDayOfWeek == dayOfWeek ? today : today.Previous(dayOfWeek);
}
于 2012-07-19T09:24:32.490 に答える
0

Ok、

DateTime GetDate(DateTime now, DayOfWeek dayOfWeek)
{
    var day = new TimeSpan(1, 0, 0, 0);
    var result = now;

    while(result.DayOfWeek != dayOfWeek)
    {        
        result = result.Substract(day)
    }

    return result;
} 
于 2012-07-19T09:27:03.343 に答える
0
private static DateTime GetDate(DateTime todayDate, DayOfWeek dayofweek)
{
    while (todayDate.DayOfWeek != dayofweek)
    {
        todayDate = todayDate.AddDays(-1);
    }
    return todayDate;
}
于 2012-07-19T09:31:11.167 に答える