我在字符串中有这个日期:
var dateString = "Saturday, September 16th";
我想做的是获得本月的简短形式......在这种情况下,它将是9月。
我试图将它转换为DateTime,如下所示:
var newDate = DateTime.ParseExact(dateString, "MMM", CultureInfo.InvariantCulture);
但是我收到了这个错误:
字符串未被识别为有效的DateTime。
有人知道如何从字符串中获取月份的简短形式吗?
答案 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 name或abbreviated 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
以包含您希望的缩写。