首页 / C# / 如何在c#中添加两个带负号的时间跨度值?
如何在c#中添加两个带负号的时间跨度值?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如何在c#中添加两个带负号的时间跨度值?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3257字,纯文字阅读大概需要5分钟。
内容图文
我的表中有两列,即员工出勤的工作时间和额外时间以及员工必须工作的总时间是九(9)小时,如果有人在9点钟办理登机手续并且在11点退房,那么系统会自动计算他/她的工作时间和额外时间现在在这种情况下工作时间将是2小时,额外时间将是负数形式,例如-7:00:00小时,因为员工在实际时间前7小时离开并且我将此负值存储为数据库中的“varchar”用于用户协助,以了解员工在给定时间或更短时间内工作得更多.现在我需要添加这些额外时间的员工来创建月份摘要但我不知道如何添加这些负时间跨度和何时我将其转换为timeofday格式,然后由于负号,系统无法转换它.
我从数据库中读取后计算工作小时数:
wrkhrs=wrkhrs.Add(Convert.ToDateTime(dr["WorkHrs"].ToString()).TimeOfDay);
我发现一些减法代码:
TimeSpan exthrs = org_work.Subtract(tot_work);
但如果时间跨度有负号,那么它就不起作用了.
如果有任何机构有任何想法,那么请分享它.提前致谢.
编辑:
public Tuple<string,string> Calculate_Hours(int id,DateTime strt, DateTime end)
{
TimeSpan wrkhrs = new TimeSpan(0, 0, 0);
TimeSpan exthrs=new TimeSpan(0,0,0);
//select * from vw_Rept_Attend where UserID ='" + id + "' and convert(date,AtnDate) between '" + strt.Date + "' and '" + end.Date + "'
cmd = new SqlCommand("sp_Calculate_Hours_For_Report", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@id", id);
cmd.Parameters.AddWithValue("@startdate", strt.Date);
cmd.Parameters.AddWithValue("@end", end.Date);
conn.Open();
dr = cmd.ExecuteReader();
while (dr.Read())
{
if (dr["WorkHrs"].ToString().Length>0)
wrkhrs=wrkhrs.Add(Convert.ToDateTime(dr["WorkHrs"].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)
{
string ext = dr["ExtraHrs"].ToString().Substring(dr["ExtraHrs"].ToString().LastIndexOf("-") +1);
exthrs = exthrs.Subtract(Convert.ToDateTime(ext).TimeOfDay);
}
}
conn.Close();
dr.Close();
return new Tuple<string, string>(string.Format("{0:00}:{1:00}:{2:00}", (int)TimeSpan.Parse(wrkhrs.ToString()).TotalHours, Math.Abs((int)TimeSpan.Parse(wrkhrs.ToString()).Minutes), Math.Abs((int)TimeSpan.Parse(wrkhrs.ToString()).Seconds)), string.Format("{0:00}:{1:00}:{2:00}", (int)TimeSpan.Parse(exthrs.ToString()).TotalHours, Math.Abs((int)TimeSpan.Parse(exthrs.ToString()).Minutes), Math.Abs((int)TimeSpan.Parse(exthrs.ToString()).Seconds)));
}
并将以上功能称为:
var mytuple = Calculate_Hours(id,Convert.ToDateTime(dtStart.Text), Convert.ToDateTime(dtEnd.Text));
string tot_workHrs= mytuple.Item1;
string tot_ExtHrs= mytuple.Item2;
以上是我的逻辑,我检索我的正确输出,如果有人有任何问题,请随时通过在这篇文章上创建新评论来问我.
希望现在这对所有人都有帮助….
解决方法:
1.
使用TimeSpan.Duration():
https://msdn.microsoft.com/en-us/library/system.timespan.duration(v=vs.110).aspx
“Returns a new TimeSpan object whose value is the absolute value of
the current TimeSpan object”
2.
或者来自HERE的一些代码:
static string ToHMString(TimeSpan timespan) {
if (timespan.Ticks < 0) return "-" + ToHMString(timespan.Negate());
return timespan.TotalHours.ToString("#0") + ":" + timespan.Minutes.ToString("00");
}
Console.WriteLine(ToHMString(TimeSpan.FromHours(3))); //Prints "3:00"
Console.WriteLine(ToHMString(TimeSpan.FromHours(-27.75))); //Prints "-28:45"
内容总结
以上是互联网集市为您收集整理的如何在c#中添加两个带负号的时间跨度值?全部内容,希望文章能够帮你解决如何在c#中添加两个带负号的时间跨度值?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。