C# 将字符串转换为DateTime以获取月份短格式

C# 将字符串转换为DateTime以获取月份短格式,c#,datetime,C#,Datetime,我有一个字符串中的日期: var dateString = "Saturday, September 16th"; 我想做的是得到这个月的简短形式…在这种情况下是9月 我尝试将其转换为DateTime,如下所示: var newDate = DateTime.ParseExact(dateString, "MMM", CultureInfo.InvariantCulture); 但我得到了这个错误: 字符串未被识别为有效的日期时间 有人知道如何从字符串中获取月份的缩写吗?您的字符串和格式显然

我有一个字符串中的日期:

var dateString = "Saturday, September 16th";
我想做的是得到这个月的简短形式…在这种情况下是9月

我尝试将其转换为DateTime,如下所示:

var newDate = DateTime.ParseExact(dateString, "MMM", CultureInfo.InvariantCulture);
但我得到了这个错误:

字符串未被识别为有效的日期时间


有人知道如何从字符串中获取月份的缩写吗?

您的字符串和格式显然不匹配。这就是为什么你会有例外

您可以使用
ddddd,MMMM dd'th'
并且由于您的字符串没有年份部分,因此将其解析为
2017
as year(同时由于2017年9月16日是星期六)

但是没有定制的日期格式可以提供
Sept
。结果是,它是或返回
Sep

除了用方法生成它的全名并保留它的前4个字符外,您没有太多的选择


您可能想尝试类似以下内容:

var dateString = "Saturday, September 16, 2017";
DateTime dt = new DateTime();
string dateFormat = "MMM";
DateTime.TryParse(dateString, out dt);
private string GetMonthAbbr(string date)
{
    string[] longMonths = new string[] {"january", "february", "march", "april", "may", "june", "july", "august", "september", "october", "november", "december"};
    string[] shortMonths = new string[] {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};

    for (int i=0;i<longMonths.Length;i++)
    {
        if (date.ToLower().Contains(" " + longMonths[i] + " "))
        {
            return shortMonths[i];
        }
    }

    return "";
}
然后,当您想要显示月份时,可以调用:

dt.ToString(dateFormat, CultureInfo.InvariantCulture);

由于您的日期格式不一致,再加上您希望返回非标准缩写,我建议只创建一个函数作为一种查找表,如下所示:

var dateString = "Saturday, September 16, 2017";
DateTime dt = new DateTime();
string dateFormat = "MMM";
DateTime.TryParse(dateString, out dt);
private string GetMonthAbbr(string date)
{
    string[] longMonths = new string[] {"january", "february", "march", "april", "may", "june", "july", "august", "september", "october", "november", "december"};
    string[] shortMonths = new string[] {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};

    for (int i=0;i<longMonths.Length;i++)
    {
        if (date.ToLower().Contains(" " + longMonths[i] + " "))
        {
            return shortMonths[i];
        }
    }

    return "";
}
私有字符串GetMonthAbbr(字符串日期)
{
string[]longMonths=新字符串[]{“一月”、“二月”、“三月”、“四月”、“五月”、“六月”、“七月”、“八月”、“九月”、“十月”、“十一月”、“十二月”};
字符串[]shortMonths=新字符串[]{“一月”、“二月”、“三月”、“四月”、“五月”、“六月”、“七月”、“八月”、“九月”、“十月”、“十一月”、“十二月”};

对于(int i=0;i
var shortMonth=“Sept”
是我能给你的最好的,没有更多的数据。@我想评论一下,至少这样我可以看出我的错误在哪里?没有生成
Sept
的自定义forhat结果。而且这个字符串与OP提到的字符串不同。据我所知,如果没有指定,DateTime将被解析为当前年份。你是c正确的是,没有一种月份格式会生成“Sept”,因此如果他想使用DateTime,唯一可用的缩写是“Sep”。否则,他可以使用字符串文字来表示“Sept”。