C# DateTime + TimeSpan = 额外 12 小时?
C# DateTime + TimeSpan = an extra 12 hours?
我想记录在某项工作上花费的时间,并且我想在一天中不同时间从事同一工作的许多条目中累积该时间。
我用它记录时间,并将时差加在一起,它起作用了....除了我的输出看起来像这样:
Original Time: 00:00:30
Addition Time: 00:00:10
TotalTime Out: 12:00:40
在这行代码中:
totTime.Text = dt4.ToString("hh:mm:ss");
如果我不添加“hh:mm:ss”,它会正确加起来,但包含我并不真正想要的日期。如果这有助于缩小范围。
有人知道这里为什么要加 12 小时吗?我完全看不出这样做的理由。
我获取时间条目并计算差异的代码如下所示:
public void startbutton_Click(object sender, EventArgs e)
{
startTime.Text = DateTime.Now.ToString("hh:mm:ss");
}
public void stopbutton_Click(object sender, EventArgs e)
{
stopTime.Text = DateTime.Now.ToString("hh:mm:ss");
DateTime dt1 = DateTime.ParseExact(startTime.Text, "hh:mm:ss", new DateTimeFormatInfo());
DateTime dt2 = DateTime.ParseExact(stopTime.Text, "hh:mm:ss", new DateTimeFormatInfo());
TimeSpan ts1 = dt2.Subtract(dt1);
diffTime.Text = ts1.ToString();
if (String.IsNullOrEmpty(totTime.Text))
{
totTime.Text = ts1.ToString();
}
else if (totTime.Text != "")
{
DateTime dt3 = DateTime.ParseExact(diffTime.Text, "hh:mm:ss", new DateTimeFormatInfo());
DateTime dt4 = dt3 + ts1;
totTime.Text = dt4.ToString("hh:mm:ss");
}
谢谢。
您的测量时间没有增加 12 小时。您只需将 TimeSpan 显示为一天中的时间。
这里把TimeSpan转换成字符串写入diffTime.Text:
TimeSpan ts1 = dt2.Subtract(dt1);
diffTime.Text = ts1.ToString();
在这里你将 diffTime.Text 解析为 DateTime:
DateTime dt3 = DateTime.ParseExact(diffTime.Text, "hh:mm:ss", new DateTimeFormatInfo());
将 TimeSpan 解析为 DateTime 从根本上是错误的。
如果 TimeSpan 为 40 秒并且您将其解析为 DateTime,则一天中的结果时间为午夜过后 40 秒,即 12:00:40 AM。这就是您在屏幕上看到的。
正如@Flydog57 所建议的那样——使用 DateTime 和 TimeSpan 进行所有计算。只需要将最终结果转为文本显示即可。
好的,明白了谢谢你的解释
我以为我早点找到了,但我没有....但我最终找到了解决方案。
这是我运行和积累的代码...比尝试传递变量要容易一些...
public void stopbutton_Click(object sender, EventArgs e)
{
DateTime dts1 = DateTime.ParseExact(startTime.Text, "hh:mm:ss", new DateTimeFormatInfo());
DateTime dts2;
dts2 = DateTime.Now;
stopTime.Text = dts2.ToString("hh:mm:ss");
TimeSpan ts1 = dts1.Subtract(dts2);
diffTime.Text = ts1.ToString(@"hh\:mm\:ss");
if (String.IsNullOrEmpty(totTime.Text))
{
totTime.Text = diffTime.Text;
}
else if (totTime.Text != "")
{
TimeSpan ts2 = TimeSpan.Parse(diffTime.Text);
TimeSpan ts3 = TimeSpan.Parse(totTime.Text);
TimeSpan ts4 = ts2 + ts3;
totTime.Text = ts4.ToString(@"hh\:mm\:ss");
}
我想记录在某项工作上花费的时间,并且我想在一天中不同时间从事同一工作的许多条目中累积该时间。
我用它记录时间,并将时差加在一起,它起作用了....除了我的输出看起来像这样:
Original Time: 00:00:30
Addition Time: 00:00:10
TotalTime Out: 12:00:40
在这行代码中:
totTime.Text = dt4.ToString("hh:mm:ss");
如果我不添加“hh:mm:ss”,它会正确加起来,但包含我并不真正想要的日期。如果这有助于缩小范围。
有人知道这里为什么要加 12 小时吗?我完全看不出这样做的理由。
我获取时间条目并计算差异的代码如下所示:
public void startbutton_Click(object sender, EventArgs e)
{
startTime.Text = DateTime.Now.ToString("hh:mm:ss");
}
public void stopbutton_Click(object sender, EventArgs e)
{
stopTime.Text = DateTime.Now.ToString("hh:mm:ss");
DateTime dt1 = DateTime.ParseExact(startTime.Text, "hh:mm:ss", new DateTimeFormatInfo());
DateTime dt2 = DateTime.ParseExact(stopTime.Text, "hh:mm:ss", new DateTimeFormatInfo());
TimeSpan ts1 = dt2.Subtract(dt1);
diffTime.Text = ts1.ToString();
if (String.IsNullOrEmpty(totTime.Text))
{
totTime.Text = ts1.ToString();
}
else if (totTime.Text != "")
{
DateTime dt3 = DateTime.ParseExact(diffTime.Text, "hh:mm:ss", new DateTimeFormatInfo());
DateTime dt4 = dt3 + ts1;
totTime.Text = dt4.ToString("hh:mm:ss");
}
谢谢。
您的测量时间没有增加 12 小时。您只需将 TimeSpan 显示为一天中的时间。
这里把TimeSpan转换成字符串写入diffTime.Text:
TimeSpan ts1 = dt2.Subtract(dt1);
diffTime.Text = ts1.ToString();
在这里你将 diffTime.Text 解析为 DateTime:
DateTime dt3 = DateTime.ParseExact(diffTime.Text, "hh:mm:ss", new DateTimeFormatInfo());
将 TimeSpan 解析为 DateTime 从根本上是错误的。 如果 TimeSpan 为 40 秒并且您将其解析为 DateTime,则一天中的结果时间为午夜过后 40 秒,即 12:00:40 AM。这就是您在屏幕上看到的。
正如@Flydog57 所建议的那样——使用 DateTime 和 TimeSpan 进行所有计算。只需要将最终结果转为文本显示即可。
好的,明白了谢谢你的解释
我以为我早点找到了,但我没有....但我最终找到了解决方案。
这是我运行和积累的代码...比尝试传递变量要容易一些...
public void stopbutton_Click(object sender, EventArgs e)
{
DateTime dts1 = DateTime.ParseExact(startTime.Text, "hh:mm:ss", new DateTimeFormatInfo());
DateTime dts2;
dts2 = DateTime.Now;
stopTime.Text = dts2.ToString("hh:mm:ss");
TimeSpan ts1 = dts1.Subtract(dts2);
diffTime.Text = ts1.ToString(@"hh\:mm\:ss");
if (String.IsNullOrEmpty(totTime.Text))
{
totTime.Text = diffTime.Text;
}
else if (totTime.Text != "")
{
TimeSpan ts2 = TimeSpan.Parse(diffTime.Text);
TimeSpan ts3 = TimeSpan.Parse(totTime.Text);
TimeSpan ts4 = ts2 + ts3;
totTime.Text = ts4.ToString(@"hh\:mm\:ss");
}