如何格式化时间跨度以显示总小时数?

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");它有一个错误 @angel TimeSpan.FromHours(40.0); @angel 对于 40.166666 问题,您可以使用 TimeSpan.TotalHours 作为整数,然后使用 TimeSpan.Minutes 和 TimeSpan.Seconds 以您想要的方式格式化字符串。 @angel,看我的编辑,你可以用FromHours()转换40小时 @Bala 我如何将“40:00:00”转换为双倍?因为它保存在数据库中...

以上是关于如何格式化时间跨度以显示总小时数?的主要内容,如果未能解决你的问题,请参考以下文章

需要将时间跨度 ADO.NET 数据列格式化为 AM/PM

如何以 12 小时 AM/PM 格式显示 JavaScript 日期时间?

如何格式化 struts-dojo datetimepicker 以显示 24 小时而不是 12 小时?

如何将 RDLC 中的日期时间格式化为以本地日期时间格式显示?

使用 ng-pick-date-time 以 12 小时格式显示时间选择器

以日期时间格式查找两列数据之间的单个时间跨度,可能使用 for 循环