@Stone1999

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

C#でDateTimeで指定した範囲をループさせたいが失敗する

Q&A

Closed

C#でDateTimeで指定した範囲をループさせたいが失敗

期間Aから期間BをループさせたいがAddDays()による加算がうまくいかずに無限ループする

例)
C#で任意の日数分ループ処理するコードを書いています。
ループ処理(for, while)中に日付の加算ができずに無限ループしてしまいます
解決方法を教えて下さい。

発生している問題・エラー

AddDaysによる日付の加算ができない

例)

無限ループ.PNG

該当するソースコード

ソースコードを入力

例)

public DateTime DisplayDate

public コンストラクタ(){
    DisplayDate = new DateTime(2023, 10, 1);
}

private List<string> CreateDefaultAchiveDate()
{
    DateTime startDate = DisplayDate;
    DateTime endDate = DisplayDate.AddMonths(6).AddDays(-1);
    var DefaultAchiveData = new List<string>();

    for(DateTime date = startDate; date <= endDate; date.AddDays(1))
    {
        DefaultAchiveData.Add(date.ToString("yyyyMMdd") + ":");
    }
    return DefaultAchiveData;
}

自分で試したこと

日付加算処理をAdd(TimeSpan)にする
while文で実行する

0 likes

3Answer

短絡的には以下で動きます。

- for(DateTime date = startDate; date <= endDate; date.AddDays(1))
+ for(DateTime date = startDate; date <= endDate; date = date.AddDays(1))

AddDaysは新しい DateTime インスタンスを返します
https://learn.microsoft.com/ja-jp/dotnet/api/system.datetime.adddays?view=net-7.0#--

そのため繰り返し条件のdate <= endDatedatestartDate(2023/10/01)から変わらず、無限ループしています。
dateに再代入する処理を追加してください。

3Like

Comments

  1. @Stone1999

    Questioner

    解決できました。
    ありがとうございます!!

AddDaysの結果を使っていないのでは?

for(DateTime date = startDate; date <= endDate; date = date.AddDays(1))
{
    DefaultAchiveData.Add(date.ToString("yyyyMMdd") + ":");
}
2Like

Comments

  1. @Stone1999

    Questioner

    解決できました。
    ありがとうございます!!

for(DateTime date = startDate; date <= endDate; date.AddDays(1))

date.AddDays(1)date = date.AddDays(1) にしたら期待した結果になると思います。

2Like

Your answer might help someone💌