2017-09-19 8 views
-5

今年のすべての月曜日の日付を出力しようとしていますが、if要素は私が与えている条件では動作しません。今年のすべての月曜日の日付を出力するにはどうすればよいですか?

これは私のコードです:

static void Main(string[] args) 
{ 
    var dagEtt = new DateTime(DateTime.Now.Year, 1, 1); 
    while (dagEtt <= DateTime.MaxValue) 
    { 
     if (dagEtt == DayOfWeek.Monday) 
      Console.WriteLine(dagEtt); 
     dagEtt = dagEtt.AddDays(1); 
    } 
} 
+1

'dagEtt.DayOfWeek == DayOfWeek.Monday' –

+5

今年の日付を取得するには、年内開始し、DateTime.MaxValue''前にいつか停止し、これはいけません将来約8000年ですか?あなたが最初の月曜日を見つけたら、1の代わりに7日間を追加してみてはいかがですか? – Amy

+3

@Amyそれは未来の証です。 –

答えて

1

私はあなたが%演算子を使用して、今年の最初の月曜日を計算することができ、少し

var start = new DateTime(DateTime.UtcNow.Year, 1, 1); 
var end = start.AddYears(1); 

while (start < end) 
{ 
    if (start.DayOfWeek == DayOfWeek.Monday) 
    { 
     Console.WriteLine(start); 
     start = start.AddDays(7); 
    } 
    else 
    start = start.AddDays(1); 
} 
+0

月曜日から7日は月曜日以外は何でもできますか? Wow –

+0

@CamiloTerevinto私はこれが明らかではないことを知っており、それを我慢しなければならないでしょう:) – tym32167

+0

Start = start.AddDays(7 + DayOfWeek.Monday-start.DayOfWeek) – Taemyr

0

あなたのコードを変更しました。これにより、ループが大幅に簡略化されます。

static void Main(string[] args) 
{ 
    int year = DateTime.Now.Year; 
    DateTime startDate = FirstMonday(year); 

    while (startDate.Year == year) 
    { 
     Console.WriteLine(startDate); 
     startDate = startDate.AddDays(7); 
    } 
} 

https://stackoverflow.com/a/5665161/3194005

public static DateTime FirstMonday(int year) 
{ 
    var firstDay = new DateTime(year, 1, 1); 

    return new DateTime(year, 1, (8 - (int)firstDay.DayOfWeek) % 7 + 1); 
} 
関連する問題