如何格式化时间跨度以显示总小时数?
Posted
技术标签:
【中文标题】如何格式化时间跨度以显示总小时数?【英文标题】:How do I format a timespan to show me total hours? 【发布时间】:2011-05-20 15:45:30 【问题描述】:我想将用户的工作时间保存在数据库varchar
列中,但默认情况下,如果小时数超过 24,格式化值包括天数。我只想要总小时数。
例如:如果用户今天工作 10:00:00,明天 13:00:00,后天 3:30:00,那么我想要的格式化总数是 26:30:00 .相反,我看到的是 1.2:30:00。
我怎样才能得到我想要的格式?
另外,当我手动将值 40:00:00 保存在数据库中,并稍后尝试将其读入 TimeSpan
时,我遇到了一个错误。
如何以我想要的方式将小时数保存在数据库中,并且以后仍能将其读回TimeSpan
?
【问题讨论】:
你问的是数据库中的数据还是BCL中的TimeSpan
结构?您的问题令人困惑。
正如 here 建议的那样,最好将刻度存储在数据库中,而不是格式化的 TimeSpan。那你就没有这个问题了。
对功能建议投票,然后等待十年让 MS 解决它:visualstudio.uservoice.com/forums/121579-visual-studio-2015/…
【参考方案1】:
你可以这样做:
TimeSpan time = ...;
string timeForDisplay = (int)time.TotalHours + time.ToString(@"\:mm\:ss");
【讨论】:
认真的吗? ...TimeSpan time = TimeSpan.FromHours(40) + TimeSpan.FromMinutes(30)
或者更简单:TimeSpan time = new TimeSpan(40, 30, 0)
msdn.microsoft.com/en-us/library/bk8a3558.aspx【参考方案2】:
试试TimeSpan.TotalHours
String timeStamp = "40:00:00";
var segments = timeStamp.Split(':');
TimeSpan t = new TimeSpan(0, Convert.ToInt32(segments[0]),
Convert.ToInt32(segments[1]), Convert.ToInt32(segments[2]));
string time = string.Format("0:1:2",
((int) t.TotalHours), t.Minutes, t.Seconds);
【讨论】:
@Bala 它得到了一些东西......(40.166666663)(这是一个例子)我如何将这个 40:00:00 转换为时间跨度?我试过时间跨度 x=timespan.Parse("40:00:00");它有一个错误 @angelTimeSpan.FromHours(40.0);
@angel 对于 40.166666 问题,您可以使用 TimeSpan.TotalHours 作为整数,然后使用 TimeSpan.Minutes 和 TimeSpan.Seconds 以您想要的方式格式化字符串。
@angel,看我的编辑,你可以用FromHours()
转换40小时
@Bala 我如何将“40:00:00”转换为双倍?因为它保存在数据库中...以上是关于如何格式化时间跨度以显示总小时数?的主要内容,如果未能解决你的问题,请参考以下文章
如何以 12 小时 AM/PM 格式显示 JavaScript 日期时间?
如何格式化 struts-dojo datetimepicker 以显示 24 小时而不是 12 小时?
如何将 RDLC 中的日期时间格式化为以本地日期时间格式显示?