C#日期时间+;时间跨度=额外的12小时?
我想记录在一份工作上花费的时间,并且我想在一天中不同时间的同一份工作的多个条目上累积这些时间 我让它记录时间,加上时差,它就工作了……除了我的输出如下:C#日期时间+;时间跨度=额外的12小时?,c#,datetime,timespan,C#,Datetime,Timespan,我想记录在一份工作上花费的时间,并且我想在一天中不同时间的同一份工作的多个条目上累积这些时间 我让它记录时间,加上时差,它就工作了……除了我的输出如下: Original Time: 00:00:30 Addition Time: 00:00:10 TotalTime Out: 12:00:40 public void startbutton_Click(object sender, EventArgs e) { startTime.Text = Da
Original Time: 00:00:30
Addition Time: 00:00:10
TotalTime Out: 12:00:40
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");
}
在这一行代码中:
totTime.Text = dt4.ToString("hh:mm:ss");
如果我没有加上“hh:mm:ss”,它加起来是正确的,但是包括了我并不想要的日期。如果这有助于缩小范围
有人知道为什么这里要增加12个小时吗?我看不出有什么理由这样做
获取时间条目并计算差异的代码如下所示:
Original Time: 00:00:30
Addition Time: 00:00:10
TotalTime Out: 12:00:40
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。文本:
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");
}
不要解析字符串以获取时间,而是将它们保留为
DateTime
实体。添加startDateTime
成员,并在第一个方法中设置它。使用日期时间和时间跨度进行所有计算。我相信你是对的,但它并没有真正解释这12个小时是从哪里来的…或者如果我允许它写下日期和时间(通过删除“hh:mm:ss”)…为什么它们不出现…所以看起来像这样:28/11/2020 00:00:07-这加在一起增加了3秒和4秒…没问题。