2008-09-17 16 views
6

Tengo problemas para decidir cuál es la mejor manera de manejar y almacenar las mediciones de tiempo.Manipulación y almacenamiento del tiempo transcurrido

Tengo una aplicación que tiene un cuadro de texto que permite a los usuarios ingresar la hora en formato hh: mm: ss o mm: ss.

Así que estaba pensando en analizar esta cadena, tokenizarla en los dos puntos y crear TimeSpan (o usar TimeSpan.Parse() y simplemente agregar un "00:" al caso mm: ss) para mi lógica empresarial. ¿Okay?

¿Cómo puedo guardar esto como en una base de datos? ¿Cuál sería el tipo de campo? DateTime parece estar mal. No quiero que se guarde un tiempo de 00:54:12 como 1901-01-01 00:54:12 que parece un poco pobre.

Respuesta

8

TimeSpan tiene un valor Int64 Ticks propiedad que se puede almacenar en su lugar, y una constructor que toma un valor garrapatas.

3

Creo que lo más simple es simplemente convertir la entrada del usuario en un número entero de segundos. Así que 54:12 == 3252 segundos, así que almacena el 3252 en tu base de datos o donde sea. Luego, cuando necesite mostrarlo al usuario, puede volver a convertirlo.

3

Por períodos de menos de un día, solo use segundos como otros han dicho.

Para períodos más largos, depende de su motor de base de datos. Si SQL Server, antes de la versión 2008 desea una fecha y hora. Está bien, puedes ignorar la fecha predeterminada 1/1/1900 que todos tendrán. Si tiene la suerte de tener el servidor sql 2008, existen tipos de datos de Fecha y Hora separados que puede usar. La ventaja de usar un tipo de fecha/hora real es el uso de la función DateDiff para comparar duraciones.

+0

aprobado para la solución multiplataforma que ya ha proporcionado, independiente de cualquier lenguaje de programación o tipo de datos base de datos específica; ) – morde

0

La mayoría de las bases de datos tienen algún tipo de intervalo de tiempo. La respuesta depende de la base de datos de la que estés hablando. Para Oracle, es simplemente un NÚMERO flotante que representa la cantidad de días (incluidos los días fraccionarios). Puedes sumar/restarlo a/desde cualquier tipo de FECHA y obtienes la respuesta correcta.

0

A modo de contaje de entero de segundos o milisegundos (según el caso)

0

¿Está recopilando tanto la hora de inicio como la de finalización? De ser así, podría usar el tipo de datos "timestamp", si su DBMS lo admite. Si no, solo como tipo de fecha/hora. Ahora, ha dicho que no desea que se guarde la parte de la fecha, pero considere el caso en el que el período de tiempo abarca la medianoche: comienza a las 23:55:01 y termina a las 00:05:14, por ejemplo, a menos que también tienes la fecha allí. Hay funciones de compilación estándar para devolver el tiempo transcurrido (en segundos) entre dos valores de fecha y hora.

0

Ir con números enteros durante segundos o minutos. Segundos es probablemente mejor. nunca te elogiarás por elegir algo con demasiada precisión. Además, para su UI, considere usar múltiples entradas de texto, no tiene que preocuparse de que el usuario realmente escriba ":" correctamente. También es mucho más fácil agregar otras restricciones, como los valores de minutos y segundos que contienen 0-59.

Cuestiones relacionadas