Respostas:
Não, não há. DateTimerepresenta algum ponto no tempo que é composto por uma data e uma hora. No entanto, você pode recuperar a parte da data por meio da Datepropriedade (que é outra DateTimecom a hora definida como 00:00:00).
E você pode recuperar propriedades de data individuais por meio de Day, Monthe 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.
datepara 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 datetimeoferece 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. Datetimepode salvá-lo lá, datenão pode mesmo, e será extremamente difícil de consertar se você começar a escrever datecom 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 valuevocê quiser.
DateTimeKind.Unspecifiedpara 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.Unspecifiedporque 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);
}
DateTimecom a hora definida para 0:00:00
Não há DateDataType.
No entanto, você pode usar DateTime.Datepara obter apenas a data.
POR EXEMPLO
DateTime date = DateTime.Now.Date;
DateTime.Now.Dateé o mesmo que DateTime.Today. Existe um DateTime.UtcNowque 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 DateTimetipo tem uma .Datepropriedade que retorna o DateTimecom 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.