我正在从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设置为日期
操作字符串格式并在同一函数内进行正确检查的正确方法是什么?
欢迎任何帮助!
答案 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);
}