如何检查日期是否格式正确,即yyyy-mmm-dd?

时间:2015-11-19 15:15:41

标签: c# string datetime

我正在接收服务电话中的数据,并希望确保该字符串的格式正确如下:

2015-Nov-19

我尝试使用格式为yyyy-mmm-dd的解析函数,但它也允许2015-11-19之类的日期。我该怎么办?

6 个答案:

答案 0 :(得分:9)

您需要使用MMM specifier代替mmm,使用基于英语的文化,例如InvariantCulture。没有mmm作为自定义日期和时间说明符。

如果您想解析多种格式,DateTime.TryParseExact has an overloadstring[]作为参数,这样您就可以提供多种格式。

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)

您可以使用正则表达式。对于日期,如果您想要考虑允许任何月份和闰年的天数,它可能会很毛茸茸。也许两步法更容易。

  1. 使用正则表达式检查格式是否正确。
  2. 通过将数据转换为日期并捕获任何异常来检查数据是否正确。

答案 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之类的日期。