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

本文关键字:是否 yyyy-mm-dd 格式 日期 何检查 检查 | 更新日期: 2023-09-27 18:22:34

我正在接收来自服务调用的数据,并希望确保字符串的日期格式正确,如:

2015-Nov-19

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

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

对于类似InvariantCulture的基于英语的文化,您需要使用MMM说明符而不是mmm。没有mmm作为自定义日期和时间说明符。

如果你想解析多种格式,DateTime.TryParseExact有一个重载,它将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说明符。

使用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
}

使用DateTime.TryParseExact并适当指定所需的格式字符串。

您可以使用正则表达式。对于日期,如果你想计算任何一个月允许的天数和闰年的天数,可能会很麻烦。也许两步走的方法会更容易。

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

将日期转换为首选格式的另一种非常简单的方法:

DateTime dt = DateTime.Now;
Console.WriteLine(dt.ToString("yyyy-MMM-dd HH:SS"));

你可以在字符串中放入你想要的任何格式。并且要转换为字符串的对象必须是DateTime对象。您可以稍后将字符串重新转换为DateTime。

使用这段代码:

        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这样的日期。