繁体   English   中英

DateTimeFormatInfo.AbbreviatedMonthNames顺序

[英]DateTimeFormatInfo.AbbreviatedMonthNames order

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

如果我以随机顺序获得这些值,如何按上述顺序对其进行排序: Jan, Feb, Mar ...

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

为什么不使用此有序列表:

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();

已经为您量身定做了:)

DateTimeFormatInfo.MonthNames签出

公共字符串[] MonthNames {get; 组; }

类型为String的一维数组,其中包含月份的区域性特定的全名。 在12个月的日历中,数组的第13个元素是一个空字符串。 InvariantInfo的数组包含“ 1月”,“ 2月”,“ 3月”,“ 4月”,“ 5月”,“ 6月”,“ 7月”,“ 8月”,“ 9月”,“ 10月”,“ 11月”,“十二月”和“”。

编辑:我发现这个问题可能是有用的

您可以使用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();

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

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

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

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

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]);
        }
    }
}

输出:一月,五月,七月

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM