DateTimeFormatInfo.AbbreviatedMonthNames顺序

时间:2015-07-14 11:48:58

标签: c# datetime

我有一个表示缩写月份的字符串列表:Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec

如果我按随机顺序获取这些值,我该如何订购它们:Jan, Feb, Mar ...

List<string> months = new List<string>();

5 个答案:

答案 0 :(得分:2)

为什么不使用这个有序列表:

List<string> months = Enumerable.Range(1, 12)
    .Select(m => DateTimeFormatInfo.InvariantInfo.GetAbbreviatedMonthName(m))
    .ToList();

列表包含:

        [0] "Jan"   
        [1] "Feb"   
        [2] "Mar"   
        [3] "Apr"   
        [4] "May"   
        [5] "Jun"   
        [6] "Jul"   
        [7] "Aug"   
        [8] "Sep"   
        [9] "Oct"   
        [11] "Dec"  

如果您想使用当前语言的月份名称:

DateTimeFormatInfo.CurrentInfo.GetAbbreviatedMonthName(m)

如果您现在有另一个包含月份名称的列表,并且此列表包含重复项或未完成但您想自然地订购此列表,那么您可以使用IndexOf

monthList = monthList.OrderBy(s => months.IndexOf(s)).ToList();

这是另一种方法,不需要另一个列表进行比较,但使用DateTime.ParseExact

monthList = monthList
    .OrderBy(s => DateTime.ParseExact(s, "MMM", DateTimeFormatInfo.InvariantInfo))
    .ToList();

答案 1 :(得分:0)

已经为您制作了一个:)

从中检查出来 DateTimeFormatInfo.MonthNames

  

public string [] MonthNames {get;组; }

     

String类型的一维数组,包含月份的特定于文化的全名。在12个月的日历中,数组的第13个元素是空字符串。 InvariantInfo的数组包含“January”,“February”,“March”,“April”,“May”,“June”,“July”,“August”,“September”,“October”,“November”,“十二月“,和”“。

编辑:我发现This question 可能有用

答案 2 :(得分:0)

您可以使用DateTime.ParseExact方法来实现此目标

            var months = new[] { "Jan", "Apr", "Sep", "Oct", "May", "Jun", "Jul", "Feb", "Mar", "Aug",  "Nov", "Dec" };
            var sortedMonthNames = months
            .Select(m => new {Name = m, Date = DateTime.ParseExact(m, "MMM", CultureInfo.InvariantCulture)})
            .OrderBy(m => m.Date.Month)
            .Select(m => m.Name)
            .ToArray();

答案 3 :(得分:0)

您可以订购并重新创建按月号排序的列表:

string[] months = {"feb", "oct", "apr", "jan"};

List<string> orderedMonths = months.OrderBy(m => DateTime.Parse("2000" + m + "1")).ToList();

答案 4 :(得分:0)

您可以使用LINQ.OrderBy()方法,在字符串数组的帮助下使用正确的格式,使用Array.IndexOf()方法来比较值:

class Program
{
    static readonly string[] format = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" };

    static void Main()
    {            
        string[] sorted = (new[] { "Jul", "Jan", "May" }).OrderBy(v => Array.IndexOf(format, v)).ToArray();

        for (int i = 0; i < sorted.Length; i++)
        {
            Console.WriteLine(sorted[i]);
        }
    }
}

输出:Jan,May,Jul