Warm tip: This article is reproduced from serverfault.com, please click

其他-C#DateTime + TimeSpan =额外的12小时?

(其他 - C# DateTime + TimeSpan = an extra 12 hours?)

发布于 2020-11-28 21:01:45

我想记录花费在某项工作上的时间,我想将这段时间累加在一天中不同时间从事同一项工作的许多条目上。

我有它记录时间,然后将时差加在一起就可以了。...除了我的输出看起来像这样:

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");
            }

谢谢。

Questioner
user13965861
Viewed
0
RaceRalph 2020-11-29 06:28:43

没有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,则一天中的结果时间是午夜20点(即12:00:40 AM)之后的40秒。这就是你在屏幕上看到的。

如@ Flydog57建议-使用DateTime和TimeSpan进行所有计算。仅将最终结果转换为文本并显示。