Respuestas:
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.
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 como datetime
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 escribir date
con el contexto de zona horaria equivocado.
Crea una clase contenedora. Algo como esto:
public class Date:IEquatable<Date>,IEquatable<DateTime>
{
public Date(DateTime date)
{
value = date.Date;
}
public bool Equals(Date other)
{
return other != null && value.Equals(other.value);
}
public bool Equals(DateTime other)
{
return value.Equals(other);
}
public override string ToString()
{
return value.ToString();
}
public static implicit operator DateTime(Date date)
{
return date.value;
}
public static explicit operator Date(DateTime dateTime)
{
return new Date(dateTime);
}
private DateTime value;
}
Y exponga lo value
que quiera.
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 configure DateTimeKind.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.
El objeto DateTime tiene una propiedad que devuelve solo la parte de fecha del valor.
public static void Main()
{
System.DateTime _Now = DateAndTime.Now;
Console.WriteLine("The Date and Time is " + _Now);
//will return the date and time
Console.WriteLine("The Date Only is " + _Now.Date);
//will return only the date
Console.Write("Press any key to continue . . . ");
Console.ReadKey(true);
}
DateTime
con la hora establecida en 0:00:00
No hay ningún tipo de Date
datos.
Sin embargo, puede usar DateTime.Date
para obtener solo la fecha.
P.EJ
DateTime date = DateTime.Now.Date;
DateTime.Now.Date
es lo mismo que DateTime.Today
. Hay un DateTime.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.
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 el DateTime
con el valor de tiempo establecido como arriba.
public class AsOfdates
{
public string DisplayDate { get; set; }
private DateTime TheDate;
public DateTime DateValue
{
get
{
return TheDate.Date;
}
set
{
TheDate = value;
}
}
}
Puede probar uno de los siguientes:
DateTime.Now.ToLongDateString();
DateTime.Now.ToShortDateString();
Pero no hay un tipo de "Fecha" en la BCL.