需要正确的时间跨度字符串格式
本文关键字:时间跨度 字符串 格式 | 更新日期: 2023-09-27 18:01:42
我有一个时间跨度字符串
1.21:00:00
它的意思是45小时,我需要它作为
45:00:00
,我使用以下方法from只需要HH:MM:SS在时间跨度字符串
对于上面的问题它可以完美地工作,但是当我将字符串更改为
时 1.21:30:00
然后提到的代码返回给我比实际时间多一个小时。在这种情况下,它返回我46:29:00,但实际我需要的是45:29:00。
我正在使用c#
编辑public Tuple<string,string> Calculate_Hours(DateTime strt, DateTime end)
{
TimeSpan wrkhrs = new TimeSpan(0, 0, 0);
TimeSpan exthrs=new TimeSpan(0,0,0);
cmd = new SqlCommand("select * from vw_Rept_Attend where UserID ='"+Convert.ToInt32 (cmbEmp.SelectedValue)+"' and convert(date,AtnDate) between '"+strt.Date+"' and '"+end.Date+"'",conn);
conn.Open();
dr = cmd.ExecuteReader();
while (dr.Read())
{
if (dr["WorkHrs"].ToString().Length>0)
wrkhrs=wrkhrs.Add(Convert.ToDateTime(dr["WorkHrs"].ToString()).TimeOfDay);
// exthrs = exthrs.Add(Convert.ToDateTime(dr["ExtraHrs"].ToString()).TimeOfDay);
if (!dr["ExtraHrs"].ToString().Contains("-") && dr["ExtraHrs"].ToString().Length > 0)
{
exthrs = exthrs.Add(Convert.ToDateTime(dr["ExtraHrs"].ToString()).TimeOfDay);
}
else if (dr["ExtraHrs"].ToString().Contains("-") && dr["ExtraHrs"].ToString().Length > 0)
{
//int index = dr["ExtraHrs"].ToString().LastIndexOf('-');
//string rhs = dr["ExtraHrs"].ToString().Substring(index + 1);
string ext = dr["ExtraHrs"].ToString().Substring(dr["ExtraHrs"].ToString().LastIndexOf("-") +1);
//TimeSpan test = Convert.ToDateTime(dr["ExtraHrs"].ToString()).TimeOfDay.Negate();
exthrs = exthrs.Subtract(Convert.ToDateTime(ext).TimeOfDay);
}
}
conn.Close();
dr.Close();
// string tst = exthrs.ToString().Substring(exthrs.ToString().LastIndexOf("-") + 1);
// wrkhrs.ToString();
// exthrs.ToString();
var val1 = TimeSpan.Parse(wrkhrs.ToString());
string val3= string.Format("{0}:{1:mm}:{1:ss}", Math.Floor(TimeSpan.Parse(wrkhrs.ToString()).TotalHours), TimeSpan.Parse(wrkhrs.ToString()));
var val2=TimeSpan.Parse(exthrs.ToString());
string val4=string.Format("{0}:{1:mm}:{1:ss}", Math.Floor(TimeSpan.Parse(exthrs.ToString()).TotalHours), TimeSpan.Parse(exthrs.ToString()));
return new Tuple<string, string>(string.Format("{0}:{1:mm}:{1:ss}", Math.Floor(TimeSpan.Parse(wrkhrs.ToString()).TotalHours), TimeSpan.Parse(wrkhrs.ToString())), string.Format("{0}:{1:mm}:{1:ss}", Math.Floor(TimeSpan.Parse(exthrs.ToString()).TotalHours), TimeSpan.Parse(exthrs.ToString())));
// MessageBox.Show(wrkhrs.ToString()+exthrs.ToString());
}
我不确定我是否得到了它,因为你的预期结果是奇怪的。您添加了30分钟,但期望在结果字符串中显示29分钟?如果我忽略,这应该工作:
var ts = TimeSpan.Parse("1.21:30:00");
string result = string.Format("{0:00}:{1:00}:{2:00}", (int)ts.TotalHours, ts.Minutes, ts.Seconds);
返回:45:30:00
如果你想处理负的时间跨度,你可以使用Math.Abs
:
String.Format("{0:00}:{1:00}:{2:00}", (int)ts.TotalHours, Math.Abs(ts.Minutes), Math.Abs(ts.Seconds));