C# 使用不正确的C计算24小时格式的小时总数#

C# 使用不正确的C计算24小时格式的小时总数#,c#,timespan,C#,Timespan,我计算小时数时出错了。您在下面看到的值是从数据库中获取的,我使用C#的任务是计算小时数的总和 我列出以下问题: 1) 总错误时间 2) 正如您在数据网格视图中所看到的,有一个9.7小时的时间,但不可能一小时有70分钟!我把C#代码和相关数据网格视图放在下面,你能帮我解决吗 DataGridView值: 24-07-2018 9:7 08:30 25-07-2018 0:0 08:30 26-07-2018 9:42 08:30 Final sum-> 18:

我计算小时数时出错了。您在下面看到的值是从数据库中获取的,我使用C#的任务是计算小时数的总和

我列出以下问题:

1) 总错误时间

2) 正如您在数据网格视图中所看到的,有一个9.7小时的时间,但不可能一小时有70分钟!我把C#代码和相关数据网格视图放在下面,你能帮我解决吗

DataGridView值:

24-07-2018  9:7     08:30
25-07-2018  0:0     08:30 
26-07-2018  9:42    08:30

Final sum-> 18:49    1:30
     private void buttonCarica_Click(object sender, EventArgs e)
     {
       dataGridViewPrincipale.Hide();
       dataGridViewSecondario.Hide();
       resetDataGrid();
       string StartDate = dateTimePickerInizio.Value.Date.ToString("dd-MM-yy");
       string EndData = dateTimePickerFine.Value.Date.ToString("dd-MM-yy");
       Utente utemp = new Utente(comboBoxUtenti.Text);
       timemanager tm = new timemanager(utemp);
       PeopleController r = new PeopleController(utemp);
       DataTable dt = tm.CaricaDataeTotaleHour(StartDate, EndData);

       if (dt.Rows.Count == 0)
       {
         reset();
         MessageBox.Show("\n ATTENZIONE:  " + comboBoxUtenti.Text + " in questo range di tempo non ha effettuato marcature");
       }
       else
       {
         labelTotaleHourWork.Show();
         labelTotaleHourWorkMod.Show();
         labelTotaleHourtimemanagerMod.Show();
         labelTotaletimemanager.Show();
         dataGridViewPrincipale.Show();
         TimeSpan tempoSpanTotaleHourWork = TimeSpan.Zero;

         foreach (DataRow dr in dt.Rows)
         {
           String TotaleHourWork = r.CaricaHourGiornaliere(dr["Data"].ToString());
           if (TotaleHour.Equals("0") == false)
           {
             TotaleHourWork = TotaleHourWork.Replace(",", ":");
             tempoSpanTotaleHourWork = SommaHour(TotaleHourWork, tempoSpanTotaleHourWork);
           }

           if (tempoSpanTotaleHourWork == TimeSpan.Zero)
           {
             TotaleHourWork = "0";
           }

           String[] row = { dr["Data"].ToString(), "" + tm.ConteggioHourGiornaliere(dr["Data"].ToString()), "" + TotaleHourWork };
           dataGridViewPrincipale.Rows.Add(row);
         }

         labelTotaleHourtimemanagerMod.Text = "" + tm.GetTotaleHourRange();
         labelTotaleHourWorkMod.Text = "" + CheckValue.ConversioneTimeSpantoString(tempoSpanTotaleHourWork);
         }
       }

private TimeSpan SommaHour(String t1, TimeSpan t2)
{
  t1= TotaleOreCantiere.ToString().Replace(",", ":");
  tempoSpanTotaleOreCantiere = tempoSpanTotaleOreCantiere + TimeSpan.Parse(t2);
  return tempoSpanTotaleOreCantiere;
}
public String CaricaHourGiornaliere(String Data)
{
  String ret = "0";
  DataTable dt = RisorseUmaneModel.CaricaHourGiornaliere(Data);

  foreach (DataRow dr in dt.Rows)
  {
    ret = dr["Ore"].ToString();
  }

  return ret;
}
public static String ConversioneTimeSpantoString(TimeSpan tm)
{
      return "" + tm.Hours.ToString().Replace("-", "").ToString() + ":" + tm.Minutes.ToString().Replace("-", "").ToString();
}
C#代码:

24-07-2018  9:7     08:30
25-07-2018  0:0     08:30 
26-07-2018  9:42    08:30

Final sum-> 18:49    1:30
     private void buttonCarica_Click(object sender, EventArgs e)
     {
       dataGridViewPrincipale.Hide();
       dataGridViewSecondario.Hide();
       resetDataGrid();
       string StartDate = dateTimePickerInizio.Value.Date.ToString("dd-MM-yy");
       string EndData = dateTimePickerFine.Value.Date.ToString("dd-MM-yy");
       Utente utemp = new Utente(comboBoxUtenti.Text);
       timemanager tm = new timemanager(utemp);
       PeopleController r = new PeopleController(utemp);
       DataTable dt = tm.CaricaDataeTotaleHour(StartDate, EndData);

       if (dt.Rows.Count == 0)
       {
         reset();
         MessageBox.Show("\n ATTENZIONE:  " + comboBoxUtenti.Text + " in questo range di tempo non ha effettuato marcature");
       }
       else
       {
         labelTotaleHourWork.Show();
         labelTotaleHourWorkMod.Show();
         labelTotaleHourtimemanagerMod.Show();
         labelTotaletimemanager.Show();
         dataGridViewPrincipale.Show();
         TimeSpan tempoSpanTotaleHourWork = TimeSpan.Zero;

         foreach (DataRow dr in dt.Rows)
         {
           String TotaleHourWork = r.CaricaHourGiornaliere(dr["Data"].ToString());
           if (TotaleHour.Equals("0") == false)
           {
             TotaleHourWork = TotaleHourWork.Replace(",", ":");
             tempoSpanTotaleHourWork = SommaHour(TotaleHourWork, tempoSpanTotaleHourWork);
           }

           if (tempoSpanTotaleHourWork == TimeSpan.Zero)
           {
             TotaleHourWork = "0";
           }

           String[] row = { dr["Data"].ToString(), "" + tm.ConteggioHourGiornaliere(dr["Data"].ToString()), "" + TotaleHourWork };
           dataGridViewPrincipale.Rows.Add(row);
         }

         labelTotaleHourtimemanagerMod.Text = "" + tm.GetTotaleHourRange();
         labelTotaleHourWorkMod.Text = "" + CheckValue.ConversioneTimeSpantoString(tempoSpanTotaleHourWork);
         }
       }

private TimeSpan SommaHour(String t1, TimeSpan t2)
{
  t1= TotaleOreCantiere.ToString().Replace(",", ":");
  tempoSpanTotaleOreCantiere = tempoSpanTotaleOreCantiere + TimeSpan.Parse(t2);
  return tempoSpanTotaleOreCantiere;
}
public String CaricaHourGiornaliere(String Data)
{
  String ret = "0";
  DataTable dt = RisorseUmaneModel.CaricaHourGiornaliere(Data);

  foreach (DataRow dr in dt.Rows)
  {
    ret = dr["Ore"].ToString();
  }

  return ret;
}
public static String ConversioneTimeSpantoString(TimeSpan tm)
{
      return "" + tm.Hours.ToString().Replace("-", "").ToString() + ":" + tm.Minutes.ToString().Replace("-", "").ToString();
}
功能加筋外科手术室:

24-07-2018  9:7     08:30
25-07-2018  0:0     08:30 
26-07-2018  9:42    08:30

Final sum-> 18:49    1:30
     private void buttonCarica_Click(object sender, EventArgs e)
     {
       dataGridViewPrincipale.Hide();
       dataGridViewSecondario.Hide();
       resetDataGrid();
       string StartDate = dateTimePickerInizio.Value.Date.ToString("dd-MM-yy");
       string EndData = dateTimePickerFine.Value.Date.ToString("dd-MM-yy");
       Utente utemp = new Utente(comboBoxUtenti.Text);
       timemanager tm = new timemanager(utemp);
       PeopleController r = new PeopleController(utemp);
       DataTable dt = tm.CaricaDataeTotaleHour(StartDate, EndData);

       if (dt.Rows.Count == 0)
       {
         reset();
         MessageBox.Show("\n ATTENZIONE:  " + comboBoxUtenti.Text + " in questo range di tempo non ha effettuato marcature");
       }
       else
       {
         labelTotaleHourWork.Show();
         labelTotaleHourWorkMod.Show();
         labelTotaleHourtimemanagerMod.Show();
         labelTotaletimemanager.Show();
         dataGridViewPrincipale.Show();
         TimeSpan tempoSpanTotaleHourWork = TimeSpan.Zero;

         foreach (DataRow dr in dt.Rows)
         {
           String TotaleHourWork = r.CaricaHourGiornaliere(dr["Data"].ToString());
           if (TotaleHour.Equals("0") == false)
           {
             TotaleHourWork = TotaleHourWork.Replace(",", ":");
             tempoSpanTotaleHourWork = SommaHour(TotaleHourWork, tempoSpanTotaleHourWork);
           }

           if (tempoSpanTotaleHourWork == TimeSpan.Zero)
           {
             TotaleHourWork = "0";
           }

           String[] row = { dr["Data"].ToString(), "" + tm.ConteggioHourGiornaliere(dr["Data"].ToString()), "" + TotaleHourWork };
           dataGridViewPrincipale.Rows.Add(row);
         }

         labelTotaleHourtimemanagerMod.Text = "" + tm.GetTotaleHourRange();
         labelTotaleHourWorkMod.Text = "" + CheckValue.ConversioneTimeSpantoString(tempoSpanTotaleHourWork);
         }
       }

private TimeSpan SommaHour(String t1, TimeSpan t2)
{
  t1= TotaleOreCantiere.ToString().Replace(",", ":");
  tempoSpanTotaleOreCantiere = tempoSpanTotaleOreCantiere + TimeSpan.Parse(t2);
  return tempoSpanTotaleOreCantiere;
}
public String CaricaHourGiornaliere(String Data)
{
  String ret = "0";
  DataTable dt = RisorseUmaneModel.CaricaHourGiornaliere(Data);

  foreach (DataRow dr in dt.Rows)
  {
    ret = dr["Ore"].ToString();
  }

  return ret;
}
public static String ConversioneTimeSpantoString(TimeSpan tm)
{
      return "" + tm.Hours.ToString().Replace("-", "").ToString() + ":" + tm.Minutes.ToString().Replace("-", "").ToString();
}
--里索斯曼模型--

函数CheckValue.conversionTimeSpantString:

24-07-2018  9:7     08:30
25-07-2018  0:0     08:30 
26-07-2018  9:42    08:30

Final sum-> 18:49    1:30
     private void buttonCarica_Click(object sender, EventArgs e)
     {
       dataGridViewPrincipale.Hide();
       dataGridViewSecondario.Hide();
       resetDataGrid();
       string StartDate = dateTimePickerInizio.Value.Date.ToString("dd-MM-yy");
       string EndData = dateTimePickerFine.Value.Date.ToString("dd-MM-yy");
       Utente utemp = new Utente(comboBoxUtenti.Text);
       timemanager tm = new timemanager(utemp);
       PeopleController r = new PeopleController(utemp);
       DataTable dt = tm.CaricaDataeTotaleHour(StartDate, EndData);

       if (dt.Rows.Count == 0)
       {
         reset();
         MessageBox.Show("\n ATTENZIONE:  " + comboBoxUtenti.Text + " in questo range di tempo non ha effettuato marcature");
       }
       else
       {
         labelTotaleHourWork.Show();
         labelTotaleHourWorkMod.Show();
         labelTotaleHourtimemanagerMod.Show();
         labelTotaletimemanager.Show();
         dataGridViewPrincipale.Show();
         TimeSpan tempoSpanTotaleHourWork = TimeSpan.Zero;

         foreach (DataRow dr in dt.Rows)
         {
           String TotaleHourWork = r.CaricaHourGiornaliere(dr["Data"].ToString());
           if (TotaleHour.Equals("0") == false)
           {
             TotaleHourWork = TotaleHourWork.Replace(",", ":");
             tempoSpanTotaleHourWork = SommaHour(TotaleHourWork, tempoSpanTotaleHourWork);
           }

           if (tempoSpanTotaleHourWork == TimeSpan.Zero)
           {
             TotaleHourWork = "0";
           }

           String[] row = { dr["Data"].ToString(), "" + tm.ConteggioHourGiornaliere(dr["Data"].ToString()), "" + TotaleHourWork };
           dataGridViewPrincipale.Rows.Add(row);
         }

         labelTotaleHourtimemanagerMod.Text = "" + tm.GetTotaleHourRange();
         labelTotaleHourWorkMod.Text = "" + CheckValue.ConversioneTimeSpantoString(tempoSpanTotaleHourWork);
         }
       }

private TimeSpan SommaHour(String t1, TimeSpan t2)
{
  t1= TotaleOreCantiere.ToString().Replace(",", ":");
  tempoSpanTotaleOreCantiere = tempoSpanTotaleOreCantiere + TimeSpan.Parse(t2);
  return tempoSpanTotaleOreCantiere;
}
public String CaricaHourGiornaliere(String Data)
{
  String ret = "0";
  DataTable dt = RisorseUmaneModel.CaricaHourGiornaliere(Data);

  foreach (DataRow dr in dt.Rows)
  {
    ret = dr["Ore"].ToString();
  }

  return ret;
}
public static String ConversioneTimeSpantoString(TimeSpan tm)
{
      return "" + tm.Hours.ToString().Replace("-", "").ToString() + ":" + tm.Minutes.ToString().Replace("-", "").ToString();
}

TotaleHourWork.Replace(“,”,“:”)

“9:7”是指9小时7分钟。 “9,7”可能意味着9,7小时,也就是9小时42分钟

所以不管你怎么想,它都不会。这会破坏你的大部分数据


停止进行字符串替换,将日期正确地解析为时间跨度,然后使用这些时间跨度计算数字。

在函数中
公共静态字符串转换TimeSpantString(TimeSpan tm)

改变

tm.Hours //-> the remining hours in this timespan (minus days)


@DmitryBychenko结果如你所说应该是25:30,但它是1:30,但我不明白为什么要明确地提供格式,例如,代替
String TotaleHourWork=r.caricahourgnaliere(dr[“Data”].ToString())
put
String TotaleHourWork=r.caricahourgnaliere(dr[“Data”].ToString(“d\\\\.hh\\:mm\\:ss”))
请参见@DmitryBychenko now itry@DmitryBychenko如果我在toString上使用您的代码,它在编译之前会给我一个错误,它说toString没有重载方法使用1个参数
什么是dr[“Data”]
类型?例如,什么是
dr[“Data”].GetType()
result?我不明白你的意思。有可能将(7)转换为42分钟@nvoigtI不知道。。。你为什么要这么做?你可以做
TimeSpan.FromHours(0.7)
,但如果你需要做这件事,你应该花一分钟的时间,确保你做的是正确的事情。我无法更改查询已经用于其他事情,所以我必须试着理解分钟数。我真的不知道为什么它这么复杂。“9:7”似乎是一个很好的数据点。将其解析为一个时间跨度,将它们全部相加,完成。我尝试了你的解决方案,但工时计算不再正确