我正在尝试检查时间格式为“hh:mm:ss”的字符串(textBox1.Text),用于在Sql查询中将该字符串作为时间参数发送。我使用TimeSpan.TryParseExact方法:
TimeSpan check;
TimeSpan.TryParseExact(textBox1.Text, "hh:mm:ss", null, out check);
if(check==null) MessageBox.Show("incorrect time");
else...
但是当我写入文本框11到表时添加时间00:00:11(11秒)。我想这是不正确的时间,正确的是00:00:11行。怎么做对了?
答案 0 :(得分:1)
如果转换成功,您应该更改代码以使用TryParseExact的结果,该结果为布尔值true。另请注意,小时/分钟/秒<{3}}
TimeSpan check;
if(TimeSpan.TryParseExact("09:00:01", "g", CultureInfo.CurrentCulture, out check))
MessageBox.Show("Correct");
else
MessageBox.Show("Incorrect");
修改强>
看下面的评论,您可能需要standard format string
TimeSpan check;
if(TimeSpan.TryParseExact("09:00:01", @"hh\:mm\:ss", CultureInfo.CurrentCulture, out check))
MessageBox.Show("Correct");
else
MessageBox.Show("Incorrect");
答案 1 :(得分:1)
您应该使用适合您尝试执行的任务的控件。例如,在这种情况下,用户使用DateTimePicker控件而不是TextBox可能更容易也更一致。
将DateTimePicker的Format
属性设置为Time
,将ShowUpDown
属性设置为true
。您也可以在代码中执行此操作,如下所示。
myTimePicker.Format = DateTimePickerFormat.Time;
myTimePicker.ShowUpDown = true;
您还可以使用CustomFormat属性格式化您希望显示时间的方式。如果您使用CustomFormat
,则需要执行此操作:
myTimePicker.Format = DateTimePickerFormat.Custom; //instead of Time as above
myTimePicker.CustomFormat = "hh:mm:ss"; //or whichever format you want
答案 2 :(得分:0)
您可以使用正则表达式执行此操作:
using System.Text.RegularExpressions;
namespace StackOverflow
{
class Demo
{
/* ... */
readonly Regex timeFormat = new Regex(@"^(?:(?:[0-1][0-9])|2[0-3]):[0-5][0-9]:[0-5][0-9]$", RegexOptions.Compiled);
public bool IsTimeFormatValid(string time)
{
return timeFormat.IsMatch(time);
}
/* ... */
}
}
正则表达式示例:http://regex101.com/r/qR3qV6/1
注意:Timespan.TryParse旨在将字符串转换为时间跨度。 TryParseExact做同样的事情;只有它允许你指定一种文化/期望的格式(它的命名很差,因为它不会强制格式完全符合你的指定)。
如果可能,这些方法想要转换;所以他们对他们接受的东西非常慷慨。它们不是为了验证格式而设计的;只是为了最好地尝试基于给定格式转换给定数据。在这种情况下,给定一个缺少信息的字符串,他们假设没有指定小时和分钟意味着它们是0值,所以他们将您的数据视为秒。
使用正则表达式避免了这个问题 - 它表示你想检查格式而不是只看系统是否可以猜测该格式的数据意味着什么。