You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#如何从短月份名称获取月份数字?能否用ParseExact实现?

问题

我需要从短月份名称(例如通过DateTime.ToString("MMM")生成的格式)中读取对应的月份数字,比如输入"feb"或"MAR"时返回2或3。

我已经编写了如下函数,但想了解是否可以使用ParseExact方法,传入虚拟的年/日来实现该功能?

private int GetNumberFromShortMonth(string month)
{
    var monthNo = -1;
    var dt = new DateTime(2000, 01, 01);

    for (int i = 0; i <= 11; i++)
    {
        dt = dt.AddMonths(1);

        if (string.Equals(dt.ToString("MMM"), month, StringComparison.OrdinalIgnoreCase))
        {
            monthNo = dt.Month;
            break;
        }
    }

    return monthNo;
}
回答

完全可以用ParseExact实现,代码会更简洁高效。核心思路是把输入的短月份名称和虚拟年、日组合成完整日期字符串,通过ParseExact解析为DateTime对象后,直接取出月份数字即可。

需要注意这几点:

  • 虚拟年、日可随意选择,只要是合法日期就行,比如"2000/01"
  • 指定匹配的格式字符串"MMM",对应短月份名称格式
  • 设置DateTimeStyles.IgnoreCase,支持大小写不敏感的匹配
  • 建议用TryParseExact替代ParseExact,避免输入无效月份时抛出异常,和原函数的错误返回逻辑保持一致

示例代码如下:

private int GetNumberFromShortMonth(string month)
{
    // 拼接虚拟日期字符串,格式为"短月份 日, 年"
    var dateString = $"{month} 01, 2000";
    if (DateTime.TryParseExact(dateString, "MMM dd, yyyy", CultureInfo.InvariantCulture, 
        DateTimeStyles.IgnoreCase, out DateTime result))
    {
        return result.Month;
    }
    // 输入无效时返回-1
    return -1;
}

如果需要适配特定地区的月份缩写,只需把CultureInfo.InvariantCulture换成对应区域文化即可,比如CultureInfo.GetCultureInfo("zh-CN")对应中文环境的短月份名称。

内容的提问来源于stack exchange,提问作者DaveWuzHere

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 15:12:14