2011-03-16 18 views

Respuesta

20

Si lo que desea es mostrar que, convierta en una expresión para el valor del cuadro de texto:

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

Si usted quiere hacer cálculos sobre el mismo, convertir los segundos a un DateTime en su conjunto de datos. Uso de SQL:

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

en LINQ esto sería algo así como:

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

a continuación, puedes formatearlo como un DateTime normal.

+0

su "00:00:00" se puede cambiar a solo 0. – jimconstable

+1

Funciona perfectamente para todas las duraciones <24 h. – xan

+0

Funciona muy bien para timespans individuales, pero no funciona cuando desea agregar los resultados – flup

13

Si necesita trabajar con tiempos superiores a 24 horas (la solución de Chris Latta será integral en estos casos), entonces hay un par de soluciones.

fórmula sencilla

Si desea sólo tiene que utilizar una fórmula en el campo como lo siguiente de this thread, (que también une de nuevo a esta pregunta)!

=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 

Si necesita rellenar su valor a 2 caracteres se puede envolver alrededor de un RIGHT("0" & {X}, 2) cada subsección, donde {x} indica uno de los cálculos individuales en la fórmula anterior.

Código Detrás

Otro enfoque, también se sugiere en este hilo, es utilizar TimeSpan.FromSeconds (doc), y hay una aplicación de que en esta blog, utilizando código personalizado atrás en el informe.

Terminé usando el enfoque de código personalizado (ya que tenía muchos campos que lo compartían), y combinándolo con algo más parecido al primer método porque no quería que empezaran a aparecer días solo quería horas para contar más grande que 23.

he añadido algunos custom code el informe de la siguiente manera, que rellena todos los valores de al menos 2 caracteres, y permite horas a contar hasta hora> 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 

y luego llamaron a este el uno celda en preguntas de la siguiente manera:

=code.ConvertSecondsToHourMinSec(Fields!MyField.Value) 

¡Espero que esto ayude a otra persona!

1

uso de una función como esta:

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 
2

Uso expresión a continuación, vuelva a colocar en negrilla con el campo que contiene los segundos variable.

= DateAdd (DateInterval.Second, Sum (Fields! TotalDuration.Value), CDate ("1900-01-01 00:00:00"))

I se aplican siempre formating en el cuadro de texto Properties-

H "h "m" m "s" s" se mostrará como "2h 16m 5s"

0

He utilizado la idea de Xan recientemente y debido a que el número de segundos que tengo es bastante grande, me quedé sin límite de tipo entero. Por lo tanto, he diseñado un enfoque diferente - tal vez someobody encontrará útil :)

que necesitaba para crear campos calculados para horas, minutos y segundos - se usa fórmulas siguientes:

  • XXXNumberOfHours = int (campos TimeInSec!. valor/3600)
  • XXXNumberOfMinutes = int ((Fields! TimeInSec.Value Mod 3600)/60)
  • XXXNumberOfSeconds = = ((Fields! TimeInSec.Value Mod 3600) mod 60)

Entonces creé una expresión para mostrar los segundos en HH: MM: SS (sin fin de semana - no es necesario que) Formato:

  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)

In las líneas anteriores pueden ver que la línea (1) calcula el número de horas, la línea (3) calcula el número de minutos y la línea (5) calcula el número de segundos. Por supuesto, puede observar que se realizan cálculos adicionales para obtener la cantidad de minutos completos de XXNumberOfSeconds y lo mismo se aplica a Minutos/Horas. Esto también podría hacerse en los campos calculados (y tal vez incluso sería más correcto hacerlo :)); sin embargo, preferí usar el enfoque anterior.

De esta manera pude formatear números muy grandes de segundos que exceden el tamaño de número entero.

Cuestiones relacionadas