Pregunta

Tengo problemas para decidir cuál es la mejor manera de manejar y almacenar las mediciones de tiempo.

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 planeando 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 de negocios.¿De acuerdo?

¿Cómo almaceno esto como en una base de datos?¿Cuál sería el tipo de campo?DateTime parece incorrecto.¿No quiero que una hora de 00:54:12 se almacene como 1901-01-01 00:54:12 que parece un poco pobre?

¿Fue útil?

Solución

TimeSpan tiene un Int64 Garrapatas propiedad que puedes almacenar en su lugar, y una constructor eso toma un valor de Tics.

Otros consejos

Creo que lo más sencillo es convertir la entrada del usuario en un número entero de segundos.Entonces 54:12 == 3252 segundos, así que almacene el 3252 en su base de datos o donde sea.Luego, cuando necesite mostrárselo al usuario, podrá volver a convertirlo.

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

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

La mayoría de las bases de datos tienen algún tipo de intervalo de tiempo.La respuesta depende de de qué base de datos estés hablando.Para Oracle, es solo un NÚMERO de punto flotante que representa la cantidad de días (incluidos los días fraccionarios).Puede sumar/restar eso a/de cualquier tipo de FECHA y obtendrá la respuesta correcta.

Como un número entero de segundos (o milisegundos, según corresponda)

¿Está recopilando tanto la hora de inicio como la hora de finalización?Si es así, podría utilizar el tipo de datos "marca de tiempo", si su DBMS lo admite.Si no, simplemente como un tipo de fecha/hora.Ahora, ha dicho que no desea que se almacene 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 ahí.Hay funciones estándar integradas para devolver el tiempo transcurrido (en segundos) entre dos valores de fecha y hora.

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

y el tipo int debería hacerlo, almacenándolo como segundos y analizándolo de un lado a otro

http://msdn.microsoft.com/en-us/library/ms187745.aspx

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top