从List <datetime> </datetime>获取月份列表

时间:2010-08-20 18:28:39

标签: c# asp.net linq list

我在ASP.NET 3.5 / C#中使用List来过滤特定月份的现有日期列表(总共约20个)。因此,如果用户选择2010年(ddlFromYear.SelectedItem.Text == 2010),那么返回的列表将只包含8个月,因为我们只会到8月份。

我的问题是 - 如何将DateTime输出为int,甚至最好输出一个月,例如“八月”。这样,当我绑定另一个DropDown时,我可以列出所有月份(1月,2月......),正如我所提到的那样,将由年(2009年,2010年......)决定

    int yearSelected;
    bool success = Int32.TryParse(ddlFromYear.SelectedItem.Text, out yearSelected);
    if (success)
    {
        List<DateTime> datesSelected = new List<DateTime>();
        datesSelected =
            (from n in dates
             where n.Year.Equals(yearSelected)
             select n).ToList();

        dateMonths.Sort();
        ddlFromMonth.Items.Clear();
        ddlFromMonth.DataSource = datesSelected;
        ddlFromMonth.DataBind();
    }

2 个答案:

答案 0 :(得分:6)

如果您希望将日期表示为月份名称,则可以执行类似

的操作
List<string> months = (from n in dates 
                      where n.Year.Equals(yearSelected)
                      select n.ToString("MMM")).ToList();

// optionally include call to .Distinct() prior to .ToList() if there 
// could be duplicates and you want to exclude them

哪会创建{ "January", "February", "March" /* etc. */ };

答案 1 :(得分:0)

selected answer对原始问题有好处。对于任何可能会遇到这个问题且需要在更多日期(即不限于一年)运行的人来说,这样做应该更有效:

DateTimeFormatInfo formatInfo = CultureInfo.CurrentCulture.DateTimeFormat;
List<string> month = dates.Select(n => n.Month)
                          .Distinct()
                          .OrderBy(n => n)
                          .Select(n => formatInfo.GetMonthName(n))
                          .ToList();