自定义日期格式验证

时间:2015-01-13 14:15:34

标签: c#

我需要能够从文本框验证用户输入。不能使用日期选择器,希望我能,但这不是一个选项。唯一接受的格式为yyyyMMdd,2015年1月13日为20150113。

最初我认为这可能有效,但事实并非如此:

CultureInfo provider = CultureInfo.InvariantCulture;
var dateResult = DateTime.ParseExact(TextBox_SearchPolicyEffectiveDate.Text,"YYYYMMDD",provider);

然后我试了

DateTime dt = new DateTime(2015, 01, 13);
String.Format("{O:yyyyMMdd}", TextBox_EffectiveDate.Text.Trim());

这也不起作用,但我对这些内心的内容感到困惑。这只是一个随意的数据,因为我真的不想在那里“硬编码”我的日期。我也在看MSDN,但它没有提供我可以使用的很多内容。我看到其他帖子使用了格式yyyyddmm,所以我想我只是将'mm'替换为'dd',但这也不起作用。

1 个答案:

答案 0 :(得分:1)

在第二次尝试中使用正确的日期格式字符串,但ParseExact尝试使用的字符串不同,这很奇怪。总之...

您想要的格式为yyyyMMdd。请注意,区分大小写在这里非常重要。 mm用于分钟。

如果您想验证,那么我建议您使用TryParseExact。像这样:

CultureInfo provider = CultureInfo.InvariantCulture;
DateTime? dt = null;
bool isValid = DateTime.TryParseExact(TextBox_SearchPolicyEffectiveDate.Text, "yyyyMMdd", provider, System.Globalization.DateTimeStyles.None, out dt);

然后你可以检查它是否有效并做你想做的事情,例如:

if(isValid)
{
    // Valid so do something with the date value.
    model.MyDate = dt.Value;
}
else
{
    // Invalid so show an error message to the user.
    MessageBox.Show("Date format is invalid", "Invalid Date", MessageBoxButtons.OK);
}

您还可以通过以下方式检查有效性:

if(dt.HasValue)...