我需要能够从文本框验证用户输入。不能使用日期选择器,希望我能,但这不是一个选项。唯一接受的格式为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',但这也不起作用。
答案 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)...