C#使用文化信息验证日期的字符串输入

时间:2017-11-10 10:14:29

标签: c# .net validation datetime

我正在从Excel工作表中读取字符串输入,我想检查字符串是否是有效日期。

为此,我有:

    public static bool IsValidDate(string DateStr)
    {
        DateStr = DateStr.Trim();
        DateTime tempDate = new DateTime().Date;

        return DateTime.TryParse(DateStr, out tempDate);
    }

这里的问题是,如果字符串是 13/12/2021 ,它将返回 false(无效),因为将13设置为月份,将12设置为日期

操作字符串格式并在同一函数内进行正确检查的正确方法是什么?

欢迎任何帮助!

4 个答案:

答案 0 :(得分:1)

您必须扩展该方法,以使用一个格式字符串CultureInfo / DateTimeFormatInfo,该字符串以天而不是月开头。你可以用这个:

public static bool IsValidDate(string dateStr, out DateTime theParsedDateTime, IFormatProvider fp = null)
{
    if (fp == null)
        fp = DateTimeFormatInfo.InvariantInfo;
    return DateTime.TryParse(dateStr.Trim(), fp, DateTimeStyles.None, out theParsedDateTime);
}

现在你可以用这种方式调用这个方法,我使用了德语CultureInfo因为这是一个有效的例子。请注意,InvariantInfo不起作用,因为它以月开头:

bool valid = IsValidDate("13/12/2021", out DateTime parsedDate, new CultureInfo("de-DE"));

答案 1 :(得分:1)

试试这个:

public static bool IsValidDate(string DateStr)
{
    DateStr = DateStr.Trim();
    DateTime tempDate = new DateTime().Date;

    return DateTime.TryParse(DateStr, new System.Globalization.CultureInfo("de-DE"), System.Globalization.DateTimeStyles.None, out tempDate);
}

答案 2 :(得分:-1)

您必须使用CultureInfo.CreateSpecificCulture创建CultureInfo。 然后使用特定的文化解析字符串。

只需查看示例under

答案 3 :(得分:-2)

这适合我。

public static bool IsValidDate(string DateStr)
{
    return DateTime.ParseExact(DateStr, "dd/MM/yyyy", null);
}