我正在尝试通过用户使用DateTimePicker
和当前时间来验证所选日期,以使用户不能选择比当前时间短的时间,如下所示
if (DTP_StartTime.Value.TimeOfDay < DateTime.Today.TimeOfDay)
{
MessageBox.Show("you cannot choose time less than the current time",
"Message",
MessageBoxButtons.OK,
MessageBoxIcon.Information,
MessageBoxDefaultButton.Button1,
MessageBoxOptions.RtlReading);
}
但是现在显示出来,因此出于测试目的,我试图显示消息以查看要调节的值,并发现DateTime.Today.Date
的值为00:00:00
MessageBox.Show(DTP_StartTime.Value.TimeOfDay +" <> "+ DateTime.Today.TimeOfDay);
这是验证时间的正确方法吗?
答案 0 :(得分:1)
DateTime.Today返回当前的日期。如果需要当前时间,则应使用DateTime.Now
。
DateTime
值,而不必将其转换为字符串。
关于验证,只是不允许用户通过在显示表单之前将DateTimePicker.MinimumDateTime属性设置为DateTime.Now
来选择过去的时间,例如:
DTP_SessionDate.MinimumDateTime=DateTime.Now;
用户仍然有可能花费太长的时间来输入时间,而过去的时间则为几秒钟或几分钟。您仍然可以通过设置将来的至少1-2分钟来解决此问题:
DTP_SessionDate.MinimumDateTime=DateTime.Now.AddMinutes(1);
在任何情况下,您都可以使用
验证代码中的值if(DTP_SessionDate.Value < DateTime.Now)
{
MessageBox.Show("you cannot choose time less than the current time",
...);
}
一个更好的 选项将是使用所使用堆栈的验证功能。所有.NET堆栈,Winforms,WPF,ASP.NET均通过验证器,验证属性或验证事件提供输入验证
User Input validation in Windows Forms解释了可用于验证Windows Forms堆栈上的输入的机制。
这些事件与错误提供程序结合在一起,用于显示通常在数据输入表单中显示的感叹号和错误消息。
DateTimePicker具有Validating event,可用于验证用户输入并防止用户过去输入任何值。活动文档中的示例可以适用于此:
private void DTP_SessionDate_Validating(object sender,
System.ComponentModel.CancelEventArgs e)
{
if(DTP_SessionDate.Value < DateTime.Now)
{
e.Cancel = true;
DTP_SessionDate.Value=DateTime.Now;
// Set the ErrorProvider error with the text to display.
this.errorProvider1.SetError(DTP_SessionDate, "you cannot choose time less than the current time");
}
}
private void DTP_SessionDate_Validated(object sender, System.EventArgs e)
{
// If all conditions have been met, clear the ErrorProvider of errors.
errorProvider1.SetError(DTP_SessionDate, "");
}
How to: Display Error Icons for Form Validation with the Windows Forms ErrorProvider Component和该节中的其他文章介绍了该控件的工作原理以及如何将其与其他控件组合
更新
如果您只想验证时间,则可以使用DateTime.TimeOfDay
属性:
if(DTP_SessionDate.Value.TimeOfDay < DateTime.Now.TimeOfDay)
答案 1 :(得分:0)
根据Microsoft Docs,这是DateTime返回的结果。
不过,您可以使用DateTime.Now
来获取日期和时间。