可能重複:
Linq orderby, start with specific number, then return to lowest排序月份名稱的列表與當前月開始
我需要創建一個組合框,其中列出了一年中的月份,但需要它來啓動與當前月份的 ,然後按月份順序排列,例如:
十月
十一月
月
一月
二月
三月
等.....
的數據源是一個數據庫,它是根據月號編號月份列表(即1月= 1等),然後操縱以給出日期時間
如何在C#中對此列表進行排序,以便獲得我想要的訂單?
TIA。
可能重複:
Linq orderby, start with specific number, then return to lowest排序月份名稱的列表與當前月開始
我需要創建一個組合框,其中列出了一年中的月份,但需要它來啓動與當前月份的 ,然後按月份順序排列,例如:
十月
十一月
月
一月
二月
三月
等.....
的數據源是一個數據庫,它是根據月號編號月份列表(即1月= 1等),然後操縱以給出日期時間
如何在C#中對此列表進行排序,以便獲得我想要的訂單?
TIA。
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();
使用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);
}
這將創建個月的新列表,從當月開始。
另取這個與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();
你可以得到個月的名單在C#與List<DateTime> monthNames = DateTimeFormatInfo.CurrentInfo.MonthNames.ToList();
。它在最後得到一個List<DateTime>
13元(空月份的名字,但你可以隨時刪除最後一個元素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);
有很多方法可以做到這一點,像其他人已經表明。
[你嘗試過什麼(http://whathaveyoutried.com)? – Oded