将字符串转换为DateTime以获取Month简短形式

时间:2017-11-07 17:42:23

标签: c# datetime

我在字符串中有这个日期:

var dateString = "Saturday, September 16th";

我想做的是获得本月的简短形式......在这种情况下,它将是9月。

我试图将它转换为DateTime,如下所示:

var newDate = DateTime.ParseExact(dateString, "MMM", CultureInfo.InvariantCulture);

但是我收到了这个错误:

  

字符串未被识别为有效的DateTime。

有人知道如何从字符串中获取月份的简短形式吗?

3 个答案:

答案 0 :(得分:0)

您的字符串和格式显然不匹配。这就是你得到例外的原因。

可以使用dddd, MMMM dd'th',因为你的字符串没有年份部分,所以它将作为2017解析为年份(也是因为2017年的9月16日)星期六)。

var newDate = DateTime.ParseExact("Saturday, September 16th",
                                  "dddd, MMMM dd'th'", 
                                  CultureInfo.InvariantCulture);

但是没有自定义日期格式作为结果提供Sept。结果是abbreviated month genitive nameabbreviated month name返回Sep

除了使用MMMM specifier生成全名之外还有太多选项,并使用string.Substring方法保留它的前4个字符。

newDate.ToString("MMMM", CultureInfo.InvariantCulture).Substring(0, 4)

答案 1 :(得分:0)

你可能想尝试更像这样的东西:

var dateString = "Saturday, September 16, 2017";
DateTime dt = new DateTime();
string dateFormat = "MMM";
DateTime.TryParse(dateString, out dt);

然后,当您想要显示月份时,您可以致电:

dt.ToString(dateFormat, CultureInfo.InvariantCulture);

答案 2 :(得分:0)

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

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 "";
}

您可以更改shortMonths以包含您希望的缩写。