如何在Reporting Services中以hh:mm:ss格式显示秒的时间跨度

sea*_*cus 12 time reporting-services ssrs-2008

在MS Reporting Services 2008中,我有一个字段,其持续时间存储为秒.是否有一种灵巧的方式将它变成报告的组部分中的hh:mm:ss格式?

Chr*_*tta 21

如果您只想显示它,请在表达式中转换文本框的值:

=Format(DateAdd("s", Fields!MySecondsField.Value, "00:00:00"), "HH:mm:ss")
Run Code Online (Sandbox Code Playgroud)

如果要对其进行计算,请将秒转换为数据集中的DateTime.使用SQL:

SELECT DATEADD(ss, MySecondsField, '1900-01-01') AS SecondsAsDateTime
FROM TimeTable
Run Code Online (Sandbox Code Playgroud)

在Linq,这将是这样的:

var qry = from Q in t.TimeList
    select new
    {
        SecondsAsDateTime = DateTime.Today.AddSeconds(Q.MySecondsField) 
    };
Run Code Online (Sandbox Code Playgroud)

然后你可以将它格式化为普通的DateTime.


xan*_*xan 13

如果您需要工作时间超过24小时(Chris Latta的解决方案将在这些情况下解决),那么有几个解决方案.

简单的公式

如果你只想在字段上使用一个公式,例如以下来自这个帖子,(也链接回这个问题)!

=int(sum(Fields!Sec_Online.Value)/3600) & ":" & int((sum(Fields!Sec_Online.Value) Mod 3600)/60) & ":" & (sum(Fields!Sec_Online.Value) Mod 3600) Mod 60
Run Code Online (Sandbox Code Playgroud)

如果您需要将值填充为2个字符,则可以RIGHT("0" & {X}, 2)围绕每个子部分进行换行,其中{x}表示上述公式中的一个单独计算.

代码背后

此线程中也提出了另一种方法,即使用TimeSpan.FromSeconds(doc),并且在此博客上有一个实现,使用报告中的自定义代码.

我最终使用自定义代码方法(因为我有很多字段共享这个),并将它与更像第一种方法的东西结合起来,因为我不希望天开始出现,我只想要数小时计算大于23.

我在报告中添加了一些自定义代码,如下所示,将所有值填充到至少2个字符,并允许数小时计数> 23.

Public Function ConvertSecondsToHourMinSec(ByVal intTotalSeconds) As String
    Dim hours As String =INT(intTotalSeconds/3600)
    If Len(hours) < 2 Then
        hours = RIGHT(("0" & hours), 2)
    End If
    Dim mins As String = RIGHT("0" & INT((intTotalSeconds MOD 3600)/60), 2)
    Dim secs AS String = RIGHT("0" & ((intTotalSeconds MOD 3600) MOD 60), 2)

    ConvertSecondsToHourMinSec = hours & ":" & mins & ":" & secs

End Function
Run Code Online (Sandbox Code Playgroud)

然后在每个单元格中调用此问题如下:

=code.ConvertSecondsToHourMinSec(Fields!MyField.Value)
Run Code Online (Sandbox Code Playgroud)

我希望这有助于其他人!