Есть ли только тип даты типа TimeSpan вместо DateTime? - PullRequest
0 голосов
/ 15 октября 2011

В моем приложении у меня есть тип Movie и тип User, где любой User может указать, когда они видели определенный фильм в своих журналах вместе с рейтингами и т. Д., Но меня интересует только день, а не время, поэтому было интересно, если есть только тип Date, который хранит только день и ничего больше, то есть нет Time.

Ответы [ 8 ]

4 голосов
/ 15 октября 2011

Там нет. Самое близкое, если вы должны убедиться, что к вашему DateTime объекту не прикреплены временные данные, это использовать свойство DateTime.Date , чье возвращаемое значение - другое DateTime, но со значением времени 00:00:00 (полночь).

И, конечно же, при отображении даты вы можете управлять форматированием так, как вам нравится.

В частности, спецификатор короткой даты :

var dateValue = new DateTime(2011, 10, 14);
dateValue.ToString("d");

Будет выводить 10/14/2011 в инвариантной культуре.

3 голосов
/ 15 октября 2011

Обычно вы используете DateTime с временем, установленным на полночь.Вы можете превратить любую метку времени в дату, используя свойство DateTime.Date.

Если вам нужно более компактное представление, вы можете вычислить целое число, представляющее дату как число дней с определенного дня, но я 'Я делаю это, только если это действительно необходимо.

Но DateTime немного уродливо для местного времени (это нормально для времени UTC), поэтому вы можете рассмотреть возможность работы с DateTimeOffset или использовать стороннюю библиотеку..

2 голосов
/ 15 октября 2011

Нет, нет.Вы можете использовать DateTime, но я не рекомендую это.Это принципиально неправильный тип для работы, и он имеет некоторые очень странные характеристики .

Я занят работой над Noda Time , альтернативной библиотекой даты и временидля .NET на основе механизма вычисления Joda Time , но с интерфейсом API с нуля.Он еще не полностью готов к производству, но уже готов - и мне было бы интересно оказать столько помощи, сколько необходимо для первых пользователей ...

Конечно, мы поддерживаем LocalDate :) (Это нене просто хранить дату - она ​​также сохраняет используемую календарную систему, так что если вы не используете общий григорианский календарь, вы все равно можете выполнять операции в своей естественной системе, но это другой вопрос.)

1 голос
/ 15 октября 2011

Используйте конструктор DateTime, который принимает год, месяц и день:

public DateTime(
      int year,
      int month,
      int day
  )

например.

DateTime usersDate = new DateTime(2011, 10, 14);

Обратите внимание, что здесь все еще используется тот же тип, но с нулевым временем (полночь).

0 голосов
/ 15 октября 2011

Это то, для чего DateTime.Date .Это все еще DateTime, но он обнуляет время для вас.Просто используйте это последовательно, и вы получите то, что хотите.

0 голосов
/ 15 октября 2011

Не настолько, насколько я знаю, но вы всегда можете просто сослаться на Date часть DateTime объекта.

Как это: DateTime myDate = DateTime.Now.Date;

0 голосов
/ 15 октября 2011

Нет.Но вы можете создать один из них (на основе DateTime)

0 голосов
/ 15 октября 2011

В BCL нет.Но вы можете использовать различные переопределения ToString для отображения (возврата строки), которая содержит только дату и игнорирует часть времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...