C# 使用不正确的C计算24小时格式的小时总数#
我计算小时数时出错了。您在下面看到的值是从数据库中获取的,我使用C#的任务是计算小时数的总和 我列出以下问题: 1) 总错误时间 2) 正如您在数据网格视图中所看到的,有一个9.7小时的时间,但不可能一小时有70分钟!我把C#代码和相关数据网格视图放在下面,你能帮我解决吗 DataGridView值: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:
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())
putString 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”似乎是一个很好的数据点。将其解析为一个时间跨度,将它们全部相加,完成。我尝试了你的解决方案,但工时计算不再正确