对当前月份开始的月份名称列表进行排序

时间:2012-10-18 10:35:36

标签: c# date sorting datetime

  

可能重复:
  Linq orderby, start with specific number, then return to lowest

我需要创建一个列出一年中几个月的ComboBox,但需要先从中开始 当月,然后以月份的顺序,例如:

十月
十一月
十二月
一月
二月
三月
等.....

数据源是数据库中的月份列表,根据月份编号(即1月= 1等)进行编号,然后进行操作以提供日期时间

如何在C#中对此列表进行排序,以便获得我想要的订单?

TIA。

4 个答案:

答案 0 :(得分:5)

string[] months = CultureInfo.CurrentCulture.DateTimeFormat.MonthNames;
var ordered = months.Skip(DateTime.Today.Month - 1)
                    .Concat(months.Take(DateTime.Today.Month - 1))
                    .Where(s=>!String.IsNullOrEmpty(s))
                    .ToList();

答案 1 :(得分:3)

使用DateTimeFormatInfo.GetMonthName methoed

List<string> list = new List<string>();
DateTimeFormatInfo dtFI = new DateTimeFormatInfo();
DateTime currentDate = DateTime.Now;
DateTime nextyearDate = currentDate.AddYears(1).AddDays(-1);
while (currentDate < nextyearDate)
{
    list.Add(dtFI.GetMonthName(currentDate.Month));
    currentDate = currentDate.AddMonths(1);
}

这将从当月开始创建一个新的月份列表。

答案 2 :(得分:2)

对LINQ的另一种看法是:

// month name source, use what you prefer
var monthNames = CultureInfo.CurrentCulture.DateTimeFormat.MonthNames;
var sorted = Enumerable.Range(1, 12).Zip(monthNames, Tuple.Create)
            .OrderBy(t => (t.Item1 - DateTime.Today.Month + 12) % 12)
            .Select(t => t.Item2)
            .ToArray();

答案 3 :(得分:0)

您可以使用List<DateTime> monthNames = DateTimeFormatInfo.CurrentInfo.MonthNames.ToList();获取C#中的月份列表。它得到一个带有13个元素的List<DateTime>(最后是一个空月份名称,但您可以随时删除最后一个元素monthNames.RemoveAt(monthNames.Count - 1); http://msdn.microsoft.com/en-us/library/system.globalization.datetimeformatinfo.monthnames.aspx

要重新排序此列表,您可以使用DateTime.Now.Month.ToString("00");获取当前月份数字索引,并重新构建列表newMonthNames = monthNames.GetRange(index, 12 - index).AddRange(monthNames.GetRange(0, index);

有许多方法可以做到这一点,就像其他方式一样。