我有两个文本框,想要计算这两个文本框之间的时间差。 我得到了它的工作,但它几乎没有,至少我认为我只是使它与一些“黑客”。
如果某些内容不正确,它也会失败,并且会抛出一个异常,我想阻止它(可能有IF,如果不正确就忽略它)。
以下是代码:
private void button1_Click(object sender, EventArgs e)
{
try
{
var first = TimeSpan.ParseExact(First.Text.Replace("-", ":").Remove(First.Text.LastIndexOf("-"), 1).Insert(First.Text.Length - 4, "."), "g", CultureInfo.InvariantCulture);
var last = TimeSpan.ParseExact(Last.Text.Replace("-", ":").Remove(First.Text.LastIndexOf("-"), 1).Insert(First.Text.Length - 4, "."), "g", CultureInfo.InvariantCulture);
var difference = first - last;
CalcDiff.Text = difference.TotalSeconds.ToString("F3");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
如你所见,它有很多“替换”和各种各样的东西,只是为了让它发挥作用。
我提供的格式是:
2013-05-22 12-07-55-324
就此而言,我只关心时间,即:12-07-55-324
所以,我告诉它要用以下来代替: - 只是做它的工作,以及类似的东西。
那么,有没有办法改善这一点。并且我可以制作某种条件,所以我不能只是按下按钮,如果它不正确它将失败(例如格式错误,或者它没有任何内容,或者文本代替)。
答案 0 :(得分:5)
您可以使用TimeOfDay
的{{1}},DateTime
可以通过DateTime.ParseExact
进行解析:
string dtString = "2013-05-22 12-07-55-324";
TimeSpan ts = DateTime.ParseExact(dtString, "yyyy-MM-dd HH-mm-ss-fff", CultureInfo.InvariantCulture).TimeOfDay;
您可以使用DateTime.TryParseExact
检查字符串是否可以成功解析:
DateTime firstDt;
DateTime lastDt;
if ( DateTime.TryParseExact(First.Text, "yyyy-MM-dd HH-mm-ss-fff", CultureInfo.InvariantCulture, DateTimeStyles.None, out firstDt )
&& DateTime.TryParseExact(Last.Text, "yyyy-MM-dd HH-mm-ss-fff", CultureInfo.InvariantCulture, DateTimeStyles.None, out lastDt ))
{
// successfully parsed both Datetimes
var difference = firstDt.TimeOfDay - lastDt.TimeOfDay;
CalcDiff.Text = difference.TotalSeconds.ToString("F3");
}
这是一种更具可读性的方法,因为您担心if
- 语句的复杂性:
DateTime firstDt, lastDt;
bool canParseFirst = DateTime.TryParseExact(First.Text, "yyyy-MM-dd HH-mm-ss-fff", CultureInfo.InvariantCulture, DateTimeStyles.None, out firstDt);
bool canParseLast = DateTime.TryParseExact(Last.Text, "yyyy-MM-dd HH-mm-ss-fff", CultureInfo.InvariantCulture, DateTimeStyles.None, out lastDt );
if(canParseFirst && canParseLast)
{
// successfully parsed both Datetimes
var difference = firstDt.TimeOfDay - lastDt.TimeOfDay;
CalcDiff.Text = difference.TotalSeconds.ToString("F3");
}
else
{
// inform the user
}
答案 1 :(得分:2)
你应该使用DateTime
,你仍然可以很容易地在两次中获得差异(只是谷歌找到两个DateTime
对象之间的差异),另外你可以使用{ {3}}指定像你那样的奇怪格式。加上那个方法将有助于缓解你提到的那些讨厌的例外!如果成功解析,它将返回true
而不是抛出异常,否则返回false。