2012-07-02 17 views
2
DateTime dt = new DateTime(); 
dt = DateTime.Now.AddMonths(1); 
int x = DateTime.DaysInMonth(dt.Year, dt.Month); 
MessageBox.Show(x.ToString()); // works ok - 31 

又如何,我可以說以下內容:如何獲得下個月每天的名字?

foreach (day in dt.Days) 
{ 
string abc = dt.DayOfWeek.ToString(); 
MessageBox.Show(abc) 
} 

問題是在第一線 - 的foreach ...

+0

好whatz錯了你的代碼(你需要把在支架中括號內的情況下,你要執行既爲循環的代碼行) – V4Vendetta

+0

我說現在的括號 – Alice

回答

4

這應該做的工作。

DateTime Base = new DateTime(DateTime.Now.Year, DateTime.Now.AddMonths(1).Month, 1); 
int x = DateTime.DaysInMonth(Base.Year, Base.Month); 
while (Base.Day != x) 
{ 
    Console.WriteLine(Base.DayOfWeek.ToString()); 
    Base = Base.AddDays(1); 
} 
+0

是的,就是這樣。謝謝。 – Alice

+0

我想指出另一個亞歷克斯的LINQ答案也是完全有效的(在我看來,它更加優雅),但我不確定兩者之間的性能差異。 –

1

嘗試DateTime.ToString(format)方法。

DateTime dt = new DateTime(); 
String dayName=dt.ToString("ddd"); 
+0

問題是在第一線 - foreach ... – Alice

1

試試這個

string day = DateTime.Now.ToString("ddd"); 
+0

問題是在第一行 - foreach ... – Alice

4

您還可以利用Enumerable.Range和LINQ(和DaysOfWeek枚舉)

DateTime dt = DateTime.Now.AddMonths(1); 

Enumerable.Range(1, DateTime.DaysInMonth(dt.Year, dt.Month)) 
    .Select(dayNumber => new DateTime(dt.Year, dt.Month, dayNumber)) 
    .Select(dayName => dayName.DayOfWeek.ToString()).ToList() 
    .ForEach(day => MessageBox.Show(day)); 

兩個.Select() s時,可以合併,但我讓他們分開可讀性。

4

你可以這樣做:

DateTime dt = new DateTime(); 
dt = DateTime.Now.AddMonths(1); 
DateTime conditionDateTime = new DateTime(dt.Year, dt.Month,DateTime.DaysInMonth(dt.Year, dt.Month)); 

for (DateTime dt1 = new DateTime(dt.Year, dt.Month, 1); dt1 <conditionDateTime; dt1 = dt1.AddDays(1)) 
    { 
     Console.Write(dt1.ToShortDateString() + " : "); 
     Console.WriteLine(dt1.DayOfWeek); 
    } 

這會給你

8/1/2012 : Wednesday 
8/2/2012 : Thursday 
8/3/2012 : Friday 
8/4/2012 : Saturday 
8/5/2012 : Sunday 
8/6/2012 : Monday 
8/7/2012 : Tuesday 
8/8/2012 : Wednesday 
8/9/2012 : Thursday 
8/10/2012 : Friday 
8/11/2012 : Saturday 
8/12/2012 : Sunday 
8/13/2012 : Monday 
8/14/2012 : Tuesday 
8/15/2012 : Wednesday 
8/16/2012 : Thursday 
8/17/2012 : Friday 
...... 
+1

+1顯示結果。 –

+0

我是否認爲for循環的條件中的代碼是在循環的每一次迭代中運行的,因此您在每個循環中創建一個新的DateTime?另外爲什麼要創建兩個DateTimes dt和dt1? –

+0

@Alex,你是對的,在條件的一部分循環中,每次迭代都會這樣做,可以通過在循環前定義一個條件日期來避免,我只是想給出一個想法,但我會編輯帖子以顯示優化 – Habib