当前位置:  开发笔记 > 编程语言 > 正文

如何将一个月份名称(字符串)解析为整数,以便在C#中进行比较?

如何解决《如何将一个月份名称(字符串)解析为整数,以便在C#中进行比较?》经验,为你挑选了7个好方法。

我需要能够比较我在数组中的一些月份名称.

如果有一些直接的方式会很好:

Month.toInt("January") > Month.toInt("May")

我的谷歌搜索似乎建议唯一的方法是编写自己的方法,但这似乎是一个常见的问题,我认为它本来已经在.Net中实现过,之前有人这样做了吗?



1> James Curran..:

DateTime.ParseExact(monthName, "MMMM", CultureInfo.CurrentCulture ).Month

虽然,为了您的目的,您可能最好只创建Dictionary月份名称到其值的映射.


在决定是否使用时,请务必考虑http://stackoverflow.com/questions/258793/how-to-parse-a-month-name-string-to-an-integer-for-comparison-in-c#258895 CultureInfo.CurrentCulture或CultureInfo.InvariantCulture

2> Aaron Palmer..:

你可以这样做:

Convert.ToDate(month + " 01, 1900").Month



3> Rasmus Faber..:

如果你使用了DateTime.ParseExact()几个人建议的方法,你应该仔细考虑当应用程序在非英语环境中运行时你想要发生什么!

在丹麦,它的ParseExact("Januar", ...)ParseExact("January", ...)应该工作,哪些应该失败?

这将是之间的差异CultureInfo.CurrentCultureCultureInfo.InvariantCulture.



4> Rune Grimsta..:

您可以使用DateTime.Parse方法获取DateTime对象,然后检查其Month属性.做这样的事情:

int month = DateTime.Parse("1." + monthName + " 2008").Month;

诀窍是建立一个有效的日期来创建一个DateTime对象.



5> Treb..:

您可以使用月份枚举:

public enum Month
{
    January,
    February,
    // (...)
    December,
}    

public Month ToInt(Month Input)
{
    return (int)Enum.Parse(typeof(Month), Input, true));
}

但是,我不是100%肯定enum.Parse()的语法.



6> 小智..:

一个简单的解决方案是创建一个包含名称和值的Dictionary.然后使用Contains(),您可以找到正确的值.

Dictionary months = new Dictionary()
{
                { "january", "01"},
                { "february", "02"},
                { "march", "03"},
                { "april", "04"},
                { "may", "05"},
                { "june", "06"},
                { "july", "07"},
                { "august", "08"},
                { "september", "09"},
                { "october", "10"},
                { "november", "11"},
                { "december", "12"},
};
foreach (var month in months)
{
    if (StringThatContainsMonth.ToLower().Contains(month.Key))
    {
        string thisMonth = month.Value;
    }
}



7> Mark Seemann..:

您不必创建DateTime实例来执行此操作.这很简单:

public static class Month
{
    public static int ToInt(this string month)
    {
        return Array.IndexOf(
            CultureInfo.CurrentCulture.DateTimeFormat.MonthNames,
            month.ToLower(CultureInfo.CurrentCulture))
            + 1;
    }
}

我正在运行da-DK文化,所以这个单元测试通过:

[Theory]
[InlineData("Januar", 1)]
[InlineData("Februar", 2)]
[InlineData("Marts", 3)]
[InlineData("April", 4)]
[InlineData("Maj", 5)]
[InlineData("Juni", 6)]
[InlineData("Juli", 7)]
[InlineData("August", 8)]
[InlineData("September", 9)]
[InlineData("Oktober", 10)]
[InlineData("November", 11)]
[InlineData("December", 12)]
public void Test(string monthName, int expected)
{
    var actual = monthName.ToInt();
    Assert.Equal(expected, actual);
}

我将把它作为练习留给读者来创建一个重载,你可以传入一个显式的CultureInfo.

推荐阅读
家具销售_903
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有