Estoy trabajando en un programa que requiere que se devuelva la fecha de un evento.
Estoy buscando un Date
, no un DateTime
.
¿Existe un tipo de datos que devuelva solo la fecha?
No, no lo hay. DateTime
representa algún punto en el tiempo que se compone de una fecha y una hora. Sin embargo, puede recuperar la parte de la fecha a través de la Date
propiedad (que es otra DateTime
con la hora establecida en 00:00:00
).
Y puede recuperar propiedades de fecha individuales mediante Day
, Month
y Year
.
Creé una estructura de fecha simple para los momentos en que necesita una fecha simple sin preocuparse por la porción de tiempo, las zonas horarias, local frente a utc, etc.
Date today = Date.Today;
Date yesterday = Date.Today.AddDays(-1);
Date independenceDay = Date.Parse("2013-07-04");
independenceDay.ToLongString(); // "Thursday, July 4, 2013"
independenceDay.ToShortString(); // "7/4/2013"
independenceDay.ToString(); // "7/4/2013"
independenceDay.ToString("s"); // "2013-07-04"
int july = independenceDay.Month; // 7
Desafortunadamente, no en .Net BCL. Las fechas generalmente se representan como un objeto DateTime con la hora establecida en medianoche.
Como puede adivinar, esto significa que tiene todos los problemas relacionados con la zona horaria, aunque para un objeto Date no querría absolutamente ningún manejo de la zona horaria.
fuente
date
para cualquier cosa es una mala idea a menos que esté 100% seguro de que su aplicación solo funcionará en una zona horaria. Guardar todo comodatetime
le brinda lo mejor de ambos mundos, incluido el más crítico, una manera fácil de evitar las pesadillas de la zona horaria si la configuración de la zona horaria de su servidor alguna vez cambia ... y comienza a escribir datos de maneras que no anticipaba.Datetime
puede salvarlo allí,date
no puede en absoluto, y será increíblemente difícil de arreglar si alguna vez comienza a escribirdate
con el contexto de zona horaria equivocado.Crea una clase contenedora. Algo como esto:
Y exponga lo
value
que quiera.fuente
DateTimeKind.Unspecified
que cuando se serialice se deserialice sin convertir (puede cambiar la fecha en función de diferentes zonas horarias).DateTimeKind.Utc
. ¡No lo configureDateTimeKind.Unspecified
porque eso garantizará que se serialice / deserialice con una compensación de zona horaria incluida! Una fecha del calendario es la misma independientemente de la zona horaria, así que no permita que el sistema la ajuste.El tipo de fecha es solo un alias del tipo de fecha y hora utilizado por VB.NET (como int se convierte en Integer). Ambos tipos tienen una propiedad Date que le devuelve el objeto con la parte de tiempo establecida en 00:00:00.
fuente
DateTime tiene una propiedad Date que puede usar para aislar la parte de la fecha. El método ToString también hace un buen trabajo al mostrar solo la parte de fecha cuando la parte de tiempo está vacía.
fuente
El objeto DateTime tiene una propiedad que devuelve solo la parte de fecha del valor.
fuente
DateTime
con la hora establecida en 0:00:00No hay ningún tipo de
Date
datos.Sin embargo, puede usar
DateTime.Date
para obtener solo la fecha.P.EJ
fuente
DateTime.Now.Date
es lo mismo queDateTime.Today
. Hay unDateTime.UtcNow
que devuelve el valor de fecha y hora como hora universal (UTC), pero no hay un método o propiedad equivalente a UTC para Hoy;DateTimeKind.UtcNow.Date
es la expresión apropiada.Puede devolver DateTime donde la parte de la hora es 00:00:00 y simplemente ignorarla. Las fechas se manejan como números enteros de marca de tiempo, por lo que tiene sentido combinar la fecha con la hora, ya que de todos modos está presente en el número entero.
fuente
Para esto, debe usar la fecha, pero ignore el valor de la hora.
Normalmente, una fecha sería una fecha y hora con la hora de
00:00:00
El
DateTime
tipo tiene una.Date
propiedad que devuelve elDateTime
con el valor de tiempo establecido como arriba.fuente
fuente
Puede probar uno de los siguientes:
Pero no hay un tipo de "Fecha" en la BCL.
fuente