我正在接收服务电话中的数据,并希望确保该字符串的格式正确如下:
2015-Nov-19
我尝试使用格式为yyyy-mmm-dd
的解析函数,但它也允许2015-11-19
之类的日期。我该怎么办?
答案 0 :(得分:9)
您需要使用MMM
specifier代替mmm
,使用基于英语的文化,例如InvariantCulture
。没有mmm
作为自定义日期和时间说明符。
如果您想解析多种格式,DateTime.TryParseExact
has an overload将string[]
作为参数,这样您就可以提供多种格式。
string s = "2015-Nov-19"; // or 2015-11-19
DateTime dt;
string[] formats = {"yyyy-MMM-dd", "yyyy-MM-dd"};
if(DateTime.TryParseExact(s, formats, CultureInfo.InvariantCulture,
DateTimeStyles.None, out dt))
{
// Successfully parse
}
我在第二种格式中使用了MM
说明符,但如果您的单个数字月份没有前导零,则需要使用M
说明符。
答案 1 :(得分:2)
使用DateTime.TryParseExact
并适当指定预期的格式字符串。
答案 2 :(得分:2)
使用DateTime.TryParseExact
DateTime dt;
string[] formats = { "yyyy-MMM-dd"};
if (!DateTime.TryParseExact(dateValue, formats,
System.Globalization.CultureInfo.InvariantCulture,
DateTimeStyles.None, out dt))
{
//your condition fail code goes here
return false;
}
else
{
//success code
}
答案 3 :(得分:1)
您可以使用正则表达式。对于日期,如果您想要考虑允许任何月份和闰年的天数,它可能会很毛茸茸。也许两步法更容易。
答案 4 :(得分:1)
将日期转换为首选格式的另一种非常简单的方法:
DateTime dt = DateTime.Now;
Console.WriteLine(dt.ToString("yyyy-MMM-dd HH:SS"));
您可以在字符串中添加所需的任何格式。要转换为字符串的对象必须是DateTime对象。您可以稍后将字符串重新转换为DateTime。
答案 5 :(得分:0)
使用这段代码:
string stringdate = "2015-Nov-19";
DateTime date = Convert.ToDateTime(stringdate);
string tempdate = date.ToString("yyyy-MMM-dd");
if (tempdate == stringdate)
{
// Successfully parsed string goes here
}
它从字符串中检查日期是否为特定格式,如果是特定格式,则成功解析日期不是。 而且它不会解析你想要的2015-11-19之类的日期。