Como otros han dicho, puede usar DateTime
ay ignorar la fecha, o usar a TimeSpan
. Personalmente, no estoy interesado en ninguna de estas soluciones, ya que ninguno de los tipos realmente refleja el concepto que está tratando de representar: considero que los tipos de fecha / hora en .NET son algo dispersos, que es una de las razones por las que comencé Noda Time . En Noda Time, puede usar el LocalTime
tipo para representar una hora del día.
Una cosa a tener en cuenta: la hora del día no es necesariamente la cantidad de tiempo transcurrida desde la medianoche del mismo día ...
(Como otro lado, si también desea representar la hora de cierre de una tienda, es posible que desee representar las 24:00, es decir, la hora al final del día. La mayoría de las API de fecha / hora, incluida Noda Hora: no permita que se represente como un valor de hora del día).
Duration
en Noda Time oTimeSpan
en BCL. Probablemente encapsule el "lugar en video + comentario" como un tipo, y luego tenga una matriz de ese tipo.Puedes usar el intervalo de tiempo
[Editar]
Teniendo en cuenta las otras respuestas y la edición de la pregunta, todavía usaría TimeSpan. No tiene sentido crear una nueva estructura donde sea suficiente una existente del marco.
En estas líneas, terminaría duplicando muchos tipos de datos nativos.
fuente
TimeSpan
este modo es algo feo. Es lo mejor que está disponible dentro del propio marco, pero eso no es lo mismo que decir que es agradable.Si ese vacío
Date
realmente te molesta, también puedes crear unaTime
estructura más simple :O, por qué molestarse: si no necesita hacer ningún cálculo con esa información, simplemente guárdelo como
String
.fuente
TimeSpan
, que ya maneja esto, y de una manera significativamente mejor.Yo digo que use una fecha y hora. Si no necesita la parte de la fecha, simplemente ignórela. Si necesita mostrar solo el tiempo al usuario, envíelo con el formato siguiente:
Parece que todo el trabajo extra de hacer una nueva clase o incluso usar un TimeSpan es innecesario.
fuente
DateTime.Now.ToString("hh:mm:ss.fff");
Microsegundos:DateTime.Now.ToString("hh:mm:ss.ffffff");
Nanosegundos (si DateTime incluso tiene tanta resolución):DateTime.Now.ToString("hh:mm:ss.fffffffff");
Según MSDNCreo que la clase de Rubens es una buena idea, así que pensé hacer una muestra inmutable de su clase Time con validación básica.
fuente
Además de Chibueze Opata :
fuente
Aquí hay una clase completa de TimeOfDay.
Esto es excesivo para casos simples, pero si necesita una funcionalidad más avanzada como lo hice, esto puede ayudar.
Puede manejar los casos de esquina, algunas matemáticas básicas, comparaciones, interacción con DateTime, análisis, etc.
A continuación se muestra el código fuente de la clase TimeOfDay. Puede ver ejemplos de uso y obtener más información aquí :
Esta clase usa DateTime para la mayoría de sus cálculos internos y comparaciones para que podamos aprovechar todo el conocimiento ya incorporado en DateTime.
fuente
Si no desea utilizar un DateTime o TimeSpan, y solo desea almacenar la hora del día, puede almacenar los segundos desde la medianoche en un Int32, o (si ni siquiera quiere segundos) los minutos desde la medianoche encajaría en un Int16. Sería trivial escribir los pocos métodos necesarios para acceder a la Hora, Minuto y Segundo desde dicho valor.
La única razón por la que puedo pensar para evitar DateTime / TimeSpan sería si el tamaño de la estructura es crítico.
(Por supuesto, si utiliza un esquema simple como el anterior incluido en una clase, también sería trivial reemplazar el almacenamiento con un TimeSpan en el futuro si de repente se da cuenta de que eso le daría una ventaja)
fuente