2012-08-03 34 views
0

我想提取所有的星期天當月和有這樣的代碼:不知道它應該是什麼類型的

private string GetDatesOfSundays(DateTime DatMonth) 
{ 
    string sReturn = ""; 
    int iDayOffset = DatMonth.Day - 1; 
    DatMonth = DatMonth.AddDays(System.Convert.ToDouble(-DatMonth.Day + 1)); 
    DateTime DatMonth2 = DatMonth.AddMonths(1).AddDays(System.Convert.ToDouble(-1)); 
    while (DatMonth < DatMonth2) 
    { 
    if (DatMonth.DayOfWeek == System.DayOfWeek.Sunday) 
    { 
     if (sReturn.Length > 0) sReturn += ","; 
     sReturn += DatMonth.ToShortDateString(); 
    } 
    DatMonth = DatMonth.AddDays(1.0); 
    } 
    return sReturn; 
} 

[HttpGet] 
public ActionResult TradeUKKPISearchesData() 
{ 
    string allSundaysInMonth = GetDatesOfSundays(System.DateTime.Now); 
    //var reportData = _reportingService.GetTradeUKKPISearches(); 
    //return View(reportData); 
} 

問題在於我喜歡的類型字符串allSundaysInMonth,也是空的ofcourse。 sReturn是字符串類型,但是我再次通過一個日期(我知道:)),但是所有的SaysaysMonth應該是什麼類型? sReturn確實有正確的日期......我需要在控制器視圖中的下拉列表中顯示這些日期,以便用戶可以選擇他/她需要運行報告的任何星期日。

感謝

+2

的IEnumerable''看起來不錯,我 – Jodrell 2012-08-03 09:44:18

+0

'DateTime的[]'也做 – 2012-08-03 09:44:52

+0

我想:IEnumerable的 allSundaysInMonth = GetDatesOfSundays(System.DateTime.Now);它會給出錯誤無法隱式地將類型'字符串'轉換爲'System.Collections.Generic.IEnumerable ':( – 2012-08-03 09:48:12

回答

0

你可以去DateTime[]IEnumerable<DateTime>

你的方法簽名應該是

private IEnumerable<DateTime> GetDatesOfSundays(DateTime DatMonth) 

private DateTime[] GetDatesOfSundays(DateTime DatMonth) 

如果你沒有帶與IEnumerable曾去該

private DateTime[] GetDatesOfSundays(DateTime DatMonth) 
{ 
    List<DateTime> lst = new List<DateTime>(); 

    DatMonth = DatMonth.AddDays(-DatMonth.Day + 1); 
    DateTime DatMonth2 = DatMonth.AddMonths(1).AddDays(System.Convert.ToDouble(-1)); 

    while (DatMonth < DatMonth2) 
    { 
     if (DatMonth.DayOfWeek == System.DayOfWeek.Sunday) 
     { 
      lst.Add(DatMonth); 
      DatMonth = DatMonth.AddDays(7); 
      continue; 
     } 

     DatMonth = DatMonth.AddDays(1); 
    } 

    return lst.ToArray(); 
} 

,並把它作爲

DateTime[] allSundaysInMonth = GetDatesOfSundays(System.DateTime.Now); 
+0

非常感謝! – 2012-08-03 10:08:46

+0

爲什麼返回一個數組,你剛剛建立了一個列表? 'IList '會更簡單。 – Jodrell 2012-08-03 10:24:53

+0

只有一個問題,請......我與上面的例子,返回lst.ToArray();包含正確的信息,但呼叫線:DateTime [] allSundaysInMonth = GetDatesOfSundays(System.DateTime.Now);不,在今天的月份裏什麼都沒有? – 2012-08-03 10:29:09

5

如何

private IEnumerable<DateTime> GetDatesOfSundays(DateTime DatMonth) 
{ 
    int iDayOffset = DatMonth.Day - 1; 
    DatMonth = DatMonth.AddDays(System.Convert.ToDouble(-DatMonth.Day + 1)); 
    DateTime DatMonth2 = 
     DatMonth.AddMonths(1).AddDays(System.Convert.ToDouble(-1)); 
    while (DatMonth < DatMonth2) 
    { 
     if (DatMonth.DayOfWeek == System.DayOfWeek.Sunday) 
     { 
      yield return DatMonth; 
     } 

     DatMonth = DatMonth.AddDays(1.0); 
    } 
} 

我會被誘惑重寫功能擴展的財產以後這樣

public static IEnumerable<Datetime> DaysOfMonth(
    this DateTime any, 
    DayOfWeek day) 
{ 
    // start at first of month 
    var candidate = new DateTime(any.Year, any.Month, 1); 

    var offset = (int)day - (int)candidate.DayOfWeek; 

    if (offset < 0) 
    { 
     offset += 7 
    } 

    candidate = candidate.AddDays(offset); 

    while (cadidate.Month == any.Month) 
    { 
     yield return candidate; 
     candidate = candidate.AddDays(7.0) 
    } 
} 

然後,你可以使用這樣的

var allSundaysInMonth = DateTime.Now.DaysOfMonth(DayOfWeek.Sunday); 

如果你想轉換IEnumerable<DateTime>string你能做到這一點,

var listOfDates = string.Join<DateTime>(", ", allSundaysInMonth); 

使用thisstring.Join超載


如果你真的想天爲一個DateTime[]你可以這樣做(但沒有必要)

DateTime[] allSundaysInMonth = GetDatesOfSundays(DateTime.Now).ToArray(); 

或對於我的擴展示例

var allSundaysInMonth = DateTime.Now.DaysOfMonth(DayOfWeek.Sunday).ToArray(); 
+0

oooo確定對不起,我從來沒有與IEnumerable工作..我現在明白/瞭解..謝謝! – 2012-08-03 09:52:36

+0

@charlie_cat:然後看我的答案。 – 2012-08-03 10:03:31

+0

謝謝我做過,我會嘗試兩個..謝謝所有! – 2012-08-03 10:08:12

相關問題