C#验证日期模式

时间:2014-01-02 16:37:59

标签: c# .net date

我正在一个框架中生成代码。日期和房产的其中一个属性时间字段是它的格式。它必须是DateTime.ToString()接受的格式,例如dd/MM/yyyy。我如何验证在应用程序中键入的掩码是否是.ToString()的有效日期时间模式?

3 个答案:

答案 0 :(得分:3)

第一个变体使用System.Globalization。第二是脏。

static bool ValidateFormat(string customFormat)
{
    return !String.IsNullOrWhiteSpace(customFormat) && customFormat.Length > 1 && DateTimeFormatInfo.CurrentInfo.GetAllDateTimePatterns().Contains(customFormat);
}

static bool ValidateFormat(string customFormat)
{
    try
    {
        DateTime.Now.ToString(customFormat);
        return true;
    }
    catch
    {
        return false;
    }
}

答案 1 :(得分:1)

就个人而言,如果实际要求是给定格式必须导致DateTime.Now.ToString(format)不抛出异常,那么在我看来,最可靠的方法是在try / catch块中使用该代码,如果它会酌情抛出异常处理。

需要注意的一点是,ToString代码依赖于DateTimeFormatInfo对象。这可能会使某些格式无效,但我无法确定。如果确实如此,则很可能会使用不同的日历等。但是,可能只需要本地化选项。对于您感兴趣的语言环境的所有(或至少是代表性样本),当然值得测试,或者最好只使用ToString(string format, IFormatProvider provider)的{​​{1}}重载。

正如其他人对编程问题发表评论,同时期望异常通常不是好的做法,但在这种情况下我认为这是最佳匹配,因为a)它完全符合要求b)其他选项会更难程序,因此更容易出现错误。

这是您可能使用的示例方法。请注意,我特意捕获FormatException而不是所有异常,以防万一我们不想捕获的其他怪异错误。

DateTime.ToString

答案 2 :(得分:0)

这么简单......

class Program
{
    static void Main(string[] args)
    {
        string s = "yyyy-MM-dd";
        string reg = @"^\bdd/MM/yyyy\b$";
        string reg1 = @"^\byyyy-MM-dd\b$";
        if (Regex.IsMatch(s, reg))
            Console.WriteLine("true");
        else if (Regex.IsMatch(s, reg1))
            Console.WriteLine("true");
        // and so on..

        Console.ReadLine();

    }
}

OR

    static void Main(string[] args)
    {
        string s = "dd/MM/yyyy";
        string reg = @"(?<dateMatch>(^\bdd/MM/yyyy\b$)|(^\byyyy-MM-dd\b$))";

        if (Regex.IsMatch(s, reg))
            Console.WriteLine("true");

        Console.ReadLine();

    }

此方法将匹配两种日期模式。 “dd / MM / yyyy”和“yyyy-MM-dd”。 添加任意数量的模式,以便匹配。