我在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();
}
答案 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();