Как кто-то может обрабатывать дату и время по умолчанию
У меня есть DAL, где я преобразую нулевое значение базы данных в их эквивалентное представление в C#. Например:
NULL for Numeric = 0
NULL for String = String.Empty
NULL for DateTime = "1/1/0001" (i.e. DateTime.MinValue)
На сегодняшний день проблема заключается в уровне представления, особенно в GridViews. Вы не можете показать 1/1/01
пользователям.
Что я делал, это проверял if myDate.Year=1 or myDate.Year < AcceptedDate
и отображать пустую строку, но, кажется, дополнительные усилия в отличие от других типов
Пожалуйста, открыт для лучшего подхода. Благодарю.
6 ответов
Использование Nullable
тип данных для хранения нулевого значения.
DateTime? value = null;
int? myNullableInt = 1;
value = DateTime.Now;
Как проверить, имеет ли переменная значение или ноль
if (value!=null)
Строковое значение может хранить ноль, поэтому нет никакого другого типа данных для строки, чтобы сохранить ноль.
string var;
if (var == null)
или же
if (String.IsNullOrEmpty(var))
Вы также можете использовать константу DateTime.MinValue.
http://msdn.microsoft.com/en-us/library/system.datetime.minvalue.aspx
Ваши условия будут:
if (myDate == DateTime.MinValue)
Я не думаю, что у вас есть большой выбор, кроме как сделать чек, как вы, и отобразить соответственно. Обнуляемый тип может облегчить вам жизнь. В зависимости от ваших данных, даже цифра должна обрабатываться таким образом. DBNull!= 0.
Ты можешь использовать Nullable
DateTime
так ты вернешься DateTime?
вместо DateTime
от вашего DAL. Таким образом, вы можете проверить, является ли возвращаемое значение нулевым.
DateTime? dateTime = null;
Вы можете использовать Nullable DateTime, как предложили другие, или использовать этот трюк: (для предотвращения недопустимых значений по умолчанию.)
// If dateTime has not been initialize, initialize to Now
// (or to any other legal inital values)
dateTime = ((dateTime != new DateTime()) ? dateTime : DateTime.Now);
Этот трюк полезен, если вам нужно использовать ненулевой DateTime и хотите указать значение по умолчанию, если его нет. (Например, у вас есть необнуляемый столбец DateTime в БД, и вы хотите установить значение, только если строка новая.)
Как уже упоминалось, вы могли бы использовать System::Nullable<DateTime>
,
Другой подход, который я видел, это использовать стандарт DateTime
и просто используйте специальное значение, такое как DateTime.MinValue
, Это полезно, если вам нужно соблюдать существующие типы интерфейса и не можете изменить DateTime
к Nullable<DateTime>
,