日期和时间编辑有问题
本文关键字:有问题 编辑 时间 日期 | 更新日期: 2023-09-27 18:05:04
下面是我的代码:
private void textBox1_TextChanged(object sender, EventArgs e)
{
DateTime myDate = DateTime.ParseExact(textBox1.Text, "yyyy-MM-dd H:m:s",
System.Globalization.CultureInfo.InvariantCulture);
TimeChangedHandler(myDate);
}
如果我从小时数中删除一个数字,那么它可以正常工作,但是如果我删除两个数字,例如我想从11更改为22,那么它就会崩溃。那么我如何使形式"yyyy-MM-dd H:m:s"
适用于所有情况呢?谢谢!
如果您想指出日期/时间无效,请使用DateTime.TryParseExact
检查是否有效,而不会抛出异常。使用返回值(true/false)来确定有效性。
基本上,当用户在编辑时,你不应该期望这个值总是有效的——就像我在编辑代码时,它不会总是语法正确。
您需要在实际使用值时检查它是否有效-在此之前,可能只是添加一个可视标记来指示它无效。
你可能想要考虑你的TimeChangedHandler
(无论它是什么)是否应该在提供的日期/时间有效时隐式触发,或者你的UI是否应该提供更明确的"使用此值"动作(例如按钮)。
另外,考虑使用DateTimePicker
作为选择日期和时间的更友好的方式。
最后,我个人会避免使用H:m:s
模式…日期部分看起来像iso -8601,所以我建议使用HH:mm:ss
来完成有效性-例如,看到2015-07-27 7:55:5
的值将是奇怪的(IMO)。
您可以从使用DateTime中获益。TryParse方法检查日期的两种格式:
private void textBox1_TextChanged(object sender, EventArgs e)
{
DateTime myDate = default(DateTime);
if(!DateTime.TryParseExact(textBox1.Text, "yyyy-MM-dd H:m:s",
System.Globalization.CultureInfo.InvariantCulture, out myDate))
DateTime.TryParseExact(textBox1.Text, "yyyy-MM-dd HH:mm:ss",
System.Globalization.CultureInfo.InvariantCulture, out myDate)
if(myDate == default(DateTime)) return; // or
// throw new ArgumentException("your text here");
TimeChangedHandler(myDate);
}
你不应该期望在用户编辑的时候这个值总是有效的——就像我在编辑代码的时候,它不会总是语法正确的。
这段代码需要放在try catch中,因为你想要灵活的值,就像这样
private void textBox1_TextChanged(object sender, EventArgs e)
{
try
{
DateTime myDate = DateTime.ParseExact(textBox1.Text, "yyyy-MM-dd H:m:s",System.Globalization.CultureInfo.InvariantCulture);
TimeChangedHandler(myDate);
}
catch (Exception ex)
{}
}
因此,如果用户输入不正确的值,它将不会爆炸,并考虑使用DateTimePicker作为选择日期和时间的更友好的方式。
因为它是在TextChanged
事件处理程序,你可能想尝试添加,try...catch
处理在实时编辑。
try
{
DateTime myDate = DateTime.ParseExact(textBox1.Text, "yyyy-MM-dd H:m:s",
System.Globalization.CultureInfo.InvariantCulture);
TimeChangedHandler(myDate);
}catch( Exception ex )
{
//Catch exception
}
尽管更好的解决方案是将其放置在不同的事件上。灵活编辑意味着实时编辑吗?如果是,在此期间将文本从11更改为22可能会导致格式发生变化,因此最好将ParseExact
放在不同的事件上。