0

これは非常に具体的なもので、C#.NET で過去 6 週間の金曜日の日付が必要です。現在、その年の金曜日の日付でいっぱいのテーブルを持つ SQL データベースを用意することで、このタスクを完了しています。

これには2つの問題があります。

1)C#で実行できると確信している場合、データベースへの不要なクエリのようです。

2) 翌年に追加するために、年末に覚えておく必要があります。

私はネットを見回しましたが、答えを明確に示している投稿がどこかにあると確信していますが、それを見つけることができないようです!

誰かがこの質問のコードを手伝ってくれることを願っています。

よろしくお願いします!

4

4 に答える 4

5

主なアイデアは、今日の前の最初の金曜日を選択し、一度に 1 週​​間ずつステップすることです。

var now = DateTime.Now;
DateTime nearestFridayBeforeToday;

if(now.DayOfWeek != DayOfWeek.Friday)
{
    nearestFridayBeforeToday = now.AddDays(DayOfWeek.Friday - now.DayOfWeek) //returns first friday after today
                                  .AddDays(-7); //so we need to subtract one week
}
else
{
    nearestFridayBeforeToday = now;
}

var sixFridaysBeforeNow = Enumerable.Range(0, 6)
                                    .Select(n => nearestFridayBeforeToday.AddDays(-7 * n));

//print results 
var r = sixFridaysBeforeNow.Select(d => string.Format("{0} : {1}", d, d.DayOfWeek));
Console.WriteLine (string.Join(Environment.NewLine, r));

プリント:

6/21/2013 3:37:52 PM : Friday
6/14/2013 3:37:52 PM : Friday
6/7/2013 3:37:52 PM : Friday
5/31/2013 3:37:52 PM : Friday
5/24/2013 3:37:52 PM : Friday
5/17/2013 3:37:52 PM : Friday
于 2013-06-25T12:35:54.137 に答える
3

構造体にはというDateTimeプロパティがありますDayOfWeek。これは、そのインスタンスに対応する曜日を示す列挙ですDateTime

したがって、次のようなコードを書くことができます。

List<DateTime> sixFridays = new List<DateTime>();
DateTime foo = DateTime.Today;

while (sixFridays.Count < 6) {
    if (foo.DayOfWeek == DayOfWeek.Friday) sixFridays.Add(foo);
    foo = foo.AddDays(-1);
}

これで、今日から 6 金曜日前になります。今日から 6 金曜日後が必要な場合は、ループに -1 の代わりに 1 日を追加します。

@Damien_The_Unbeliever は、力ずくではないアプローチを提案しました。ここに行きます:

List<DateTime> sixFridays = new List<DateTime>();
DateTime foo = DateTime.Today;

while (foo.DayOfWeek != DayOfWeek.Friday) {
    foo = foo.AddDays(-1);
}

for (int i = 0; i < 6; foo.AddDays(-7)) {
    sixFridays.Add(foo);
    i++; // I don't remember if you could place this together with foo.AddDays(-7) in the last part of the command.
}

OPが金曜日でもある場合に備えて現在の日を含めたいと言ったので編集しました。また、今日の6日前の金曜日です。

于 2013-06-25T12:31:24.653 に答える
1

これも試すことができます

 private List<DateTime> GetLastFridays()
 {

        List<DateTime> lstLastFridays = new List<DateTime>();
        TimeSpan oTimeSpan = new TimeSpan(((int)DateTime.Now.DayOfWeek + 2), 0, 0, 0, 0);
        DateTime dt = DateTime.Now.Subtract(oTimeSpan);

        lstLastFridays.Add(dt);

        for (int count = 0; count < 6; count++)
        {
            dt = dt.Subtract(new TimeSpan(7, 0, 0, 0, 0));
            lstLastFridays.Add(dt);
        }

        return lstLastFridays;

 }
于 2013-06-25T12:42:13.780 に答える