.NET Date без времени - есть один, или мне он не нужен?

Я делаю некоторое моделирование домена и сталкиваюсь с собственностью, которое, на мой взгляд, будет лучше всего показано как Date, а не DateTime, без компонента времени.

Есть ли веская причина, почему такого типа нет в Framework? Было сочтено достаточно хорошей идеей добавить тип даты в SQL Server. Кроме того, если кто-то знает о удобной реализации класса Date, пожалуйста, дайте мне знать!

Ответ 1

Нет, нет ни одного, и да, должно быть.

Я не верю, что есть хорошая причина, кроме того, что API даты и времени в .NET не очень хорош в моей ( очень предвзятый).

Я работаю над новым API под названием Noda Time, который, конечно же, имеет класс даты только в (LocalDate), но он еще не готов к производству. Возможно, он уже делает все, что вам нужно, и, если это почти так, вы всегда можете попросить только те функции, которые вам нужно выполнить раньше, а не позже...

Ответ 2

В емкости базы данных важнее, поэтому тип date, который использует меньше места, чем datetime, может иметь смысл. В приложении вам редко приходится сохранять эти несколько байтов.

Вы можете легко создать тип date, который преобразуется в и из datetime, но хранит только дни внутри. Что-то вроде:

public struct Date {

  private int _days;

  private Date(int days) { _days = days; }

  public implicit operator DateTime(Date date) {
    return DateTime.MinValue.AddDays(date._days);
  }

  public implicit operator Date(DateTime dateTime) {
    return new Date((int)(dateTime - DateTime.MinValue).TotalDays);
  }

}

Ответ 4

Использовать метод ToShortDateString(). Если вам нужно свойство для сетки или чего-то еще, сделайте свойство readonly, которое просто вернет вашDate.ToShortDateString(), и вы получили его!

Ответ 5

VB.NET имеет этот тип, тип данных Date. Я считаю, что это было здесь как требование для дедушкирования кода приложения VB6, который содержал этот тип, а не тип DateTime, который мы используем в .NET.

Дата Тип данных (Visual Basic):
http://msdn.microsoft.com/en-us/library/3eaydw6e(v=vs.110).aspx

Ответ 6

Да, есть один. Date, DateTime (VB) и DateTime (С#) обе имеют функцию с именем Date, которая возвращает только дату в дате/времени.

Существует также функция Time, поэтому вы можете использовать их для обоих и возвращать детали даты/времени отдельно.

Ответ 7

На самом деле нет необходимости - просто используйте дату, когда компонент времени установлен на ноль (т.е. полуночи предыдущего дня) или просто полностью игнорирует компонент времени.

Например, вы можете использовать DateTime.Today для получения сегодняшней даты (в отличие от DateTime.Now)