Respostas:
Não, não há. DateTime
representa algum ponto no tempo que é composto por uma data e uma hora. No entanto, você pode recuperar a parte da data por meio da Date
propriedade (que é outra DateTime
com a hora definida como 00:00:00
).
E você pode recuperar propriedades de data individuais por meio de Day
, Month
e Year
.
Eu criei uma estrutura de data simples para momentos em que você precisa de uma data simples sem se preocupar com a parte do tempo, fusos horários, local vs. 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
Infelizmente, não no .Net BCL. As datas são geralmente representadas como um objeto DateTime com a hora definida para meia-noite.
Como você pode imaginar, isso significa que você tem todos os problemas de fuso horário associados, embora para um objeto Date você não queira absolutamente nenhum tratamento de fuso horário.
date
para qualquer coisa é uma má ideia, a menos que você tenha 100% de certeza de que seu aplicativo funcionará apenas em um fuso horário. Salvar tudo como datetime
oferece o melhor dos dois mundos, incluindo o mais crítico, uma maneira fácil de evitar pesadelos de fuso horário se as configurações de fuso horário do seu servidor mudarem ... e começar a gravar dados de maneiras que você não esperava. Datetime
pode salvá-lo lá, date
não pode mesmo, e será extremamente difícil de consertar se você começar a escrever date
com o contexto de fuso horário errado.
Crie uma classe de wrapper. Algo assim:
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;
}
E exponha o que value
você quiser.
DateTimeKind.Unspecified
para que, quando serializado, seja desserializado sem conversão (pode alterar a data com base em diferentes fusos horários).
DateTimeKind.Utc
. Não defina como DateTimeKind.Unspecified
porque isso garantirá que será serializado / desserializado com um deslocamento de fuso horário incluído! A data do calendário é a mesma, independentemente do fuso horário, portanto, não deixe o sistema ajustá-la.
O tipo Date é apenas um apelido do tipo DateTime usado pelo VB.NET (como int torna-se Integer). Ambos os tipos têm uma propriedade Date que retorna o objeto com a parte do tempo definida como 00:00:00.
O objeto DateTime tem uma propriedade que retorna apenas a parte da data do 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
com a hora definida para 0:00:00
Não há Date
DataType.
No entanto, você pode usar DateTime.Date
para obter apenas a data.
POR EXEMPLO
DateTime date = DateTime.Now.Date;
DateTime.Now.Date
é o mesmo que DateTime.Today
. Existe um DateTime.UtcNow
que retorna o valor de data e hora como hora universal (UTC), mas não há nenhum método ou propriedade UTC equivalente para Hoje; DateTimeKind.UtcNow.Date
é a expressão apropriada.
Você pode retornar DateTime onde a parte da hora é 00:00:00 e simplesmente ignorá-la. As datas são tratadas como inteiros de carimbo de data / hora, portanto, faz sentido combinar a data com a hora, pois isso está presente no inteiro de qualquer maneira.
Para isso, você precisa usar a data, mas ignorar o valor da hora.
Normalmente, uma data seria um DateTime com hora de 00:00:00
O DateTime
tipo tem uma .Date
propriedade que retorna o DateTime
com o valor de tempo definido como acima.
public class AsOfdates
{
public string DisplayDate { get; set; }
private DateTime TheDate;
public DateTime DateValue
{
get
{
return TheDate.Date;
}
set
{
TheDate = value;
}
}
}
Você pode tentar um dos seguintes:
DateTime.Now.ToLongDateString();
DateTime.Now.ToShortDateString();
Mas não há nenhum tipo "Data" no BCL.