Как отобразить временной интервал в секундах в формате чч: мм: сс в службах Reporting Services - PullRequest
12 голосов
/ 17 марта 2011

В MS Reporting Services 2008 у меня есть поле, которое хранится в секундах. Есть ли удобный способ перевести его в формат чч: мм: сс в разделе группы отчета?

Ответы [ 5 ]

21 голосов
/ 17 марта 2011

Если вы просто хотите отобразить его, преобразуйте в выражение для значения текстового поля:

=Format(DateAdd("s", Fields!MySecondsField.Value, "00:00:00"), "HH:mm:ss")

Если вы хотите выполнить вычисления для него, преобразуйте секунды в DateTime в вашем наборе данных.Использование SQL:

SELECT DATEADD(ss, MySecondsField, '1900-01-01') AS SecondsAsDateTime
FROM TimeTable

В Linq это будет что-то вроде:

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

Тогда вы можете просто отформатировать его как обычный DateTime.

13 голосов
/ 31 августа 2012

Если вам нужно работать дольше, чем 24 часа (решение Криса Латты в этих случаях обернется), тогда есть пара решений.

Простая формула

Если вы хотите просто использовать формулу для поля, такую ​​как следующее из этой темы (которая также ссылается на этот вопрос)!

=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

Если вам нужнодобавив к своему значению 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

и затем вызывал это из каждой ячейки в следующих вопросах:

=code.ConvertSecondsToHourMinSec(Fields!MyField.Value)

Надеюсь, это поможет кому-то еще!

2 голосов
/ 10 августа 2015

Используйте выражение ниже, замените жирный шрифт на поле, содержащее переменную секунд.

= DateAdd (DateInterval.Second, Sum (Поля! TotalDuration.Value) , CDate ("1900-01-01 00:00:00"))

Я всегда применяю форматирование в свойствах текстового поля-

Ч "Ч" М "М" С "С" будет отображаться как "2h 16m 5s"

1 голос
/ 19 июня 2013

используйте такую ​​функцию:

Public Function ConvertTsToHMS(myValue As long) As String
    'Dim ts as TimeSpan = TimeSpan.FromTicks(myValue)
    Dim ts as TimeSpan = TimeSpan.FromSeconds(myValue)

    return Int(ts.TotalHours).ToString("00") + ":" + Int(ts.Minutes).ToString("00") + ":" + ts.Seconds.ToString("00")

End Function
0 голосов
/ 04 января 2017

Я недавно использовал идею Xan, и из-за того, что количество секунд у меня довольно большое - у меня закончился предел целочисленного типа. Поэтому я разработал другой подход - может быть, кто-то найдет его полезным:)

Мне нужно было создать вычисляемые поля для часов, минут и секунд - использовались следующие формулы:

  • XXXNumberOfHours = int (Поля! TimeInSec.Value / 3600)
  • XXXNumberOfMinutes = int ((Поля! TimeInSec.Value Mod 3600) / 60)
  • XXXNumberOfSeconds = = ((Поля! TimeInSec.Value Mod 3600) Мод 60)

Затем я создал выражение для отображения секунд в формате ЧЧ: ММ: СС (без дней - не нужно было):

  1. (Sum(Fields!LWTNumberOfHours.Value)+int((Sum(Fields!LWTNumberOfMinutes.Value) + int(Sum(Fields!LWTNumberOfSeconds.Value)/60))/60))
  2. & ":" &
  3. right("0" & (Sum(Fields!LWTNumberOfMinutes.Value) + int(Sum(Fields!LWTNumberOfSeconds.Value)/60)) Mod 60, 2)
  4. & ":" &
  5. right("0" & Sum(Fields!LWTNumberOfSeconds.Value) Mod 60, 2)

В приведенных выше строках видно, что строка (1) вычисляет количество часов, строка (3) - количество минут, а строка (5) - количество секунд. Конечно, вы можете заметить, что дополнительные вычисления сделаны, чтобы получить количество полных минут из XXNumberOfSeconds, и то же самое относится к минутам / часам. Это можно было бы также сделать в вычисляемых полях (и, возможно, было бы даже правильнее сделать это :)), однако я предпочел использовать вышеуказанный подход.

Таким образом я смог отформатировать очень большое количество секунд, которое превышает тип целочисленного типа.

...