在我的vb.net应用程序中,我使用以下代码来获取TimeSpam格式DD:hh:mm
(天数小时分钟),以向用户显示从创建条目到现在的时间。
Dim a As DateTime = DatatableRow.Item("CreateDate") '(DateTime)
Dim waitTime As TimeSpan = DateTime.Now - a
GridviewRow.Cells(1).Value = waitTime.ToString("d\:hh\:mm")
由于我的GridView越来越多地在没有DataSource
的情况下工作(我总是应该使用它)变得非常慢。所以我决定在选择时计算数据库中的所有内容。
现在我使用SQL Select命令的以下部分来计算Timespan:
CONVERT(varchar,('" & Now & "'-CreateDate),108)
' Example sql:
' select CONVERT(varchar,('" & Now & "'-CreateDate),108) as TimeDif from table_XY
108代表格式。在this页面上,我找到了一个表格,它显示了我可以使用的所有DateTime格式。这是德国人,但你会理解这张桌子。
DD:hh:mm
没有(或者我没有看到它?)格式。有没有办法自定义格式,所以它符合我的要求?
解决方案
Select *,
(SELECT
Convert(varchar,DATEDIFF(MINUTE, CreateDate,@now)/(60*24))
+':'+
RIGHT('00' + Convert(varchar,DATEDIFF(MINUTE,CreateDate,@now)%(60*24)/60),2)
+':'+
RIGHT('00' + Convert(varchar,DATEDIFF(MINUTE, CreateDate,@now)%(60*24)%60),2))
as TimeDif
from table_xy
答案 0 :(得分:1)
可能有更简单的解决方案,但这应该对您有用:
select substring(convert(varchar,('" & Now & "'-CreateDate),105),0,3)
+':'
+substring(convert(varchar,('" & Now & "'-CreateDate),108),0,6)
as TimeDif from table_XY
所以基本上你只需使用TSQL string functions来创建你想要的格式。
击>
编辑:因为这是为了显示时差:
你可以自己计算一下:
declare @now datetime
set @now=GETDATE();
SELECT
Convert(varchar,DATEDIFF(MINUTE, CreateDate, @now)/(60*24)) --get days
+':'+
Convert(varchar,DATEDIFF(MINUTE, CreateDate, @now)%(60*24)/60) --get hours
+':'+
Convert(varchar,DATEDIFF(MINUTE, CreateDate, @now)%(60*24)%60) --get minutes
原因是,您可以进一步格式化每个部分(前导零等)。