nullable datetimes

#c#

#c#

Вопрос:

У меня есть 1 поле datetime, которое не обнуляется, и 1, которое обнуляется. Я могу использовать следующий код с ненулевым значением :

  c.StartDate.Day.ToString()   "/"   
 c.StartDate.Month.ToString()   "/"   
 c.StartDate.Year.ToString()
  

Но когда я пытаюсь сделать это с помощью nullable, я получаю ошибку :

‘Система.Nullable’ не содержит определения для ‘Day’ и никакого метода расширения ‘Day’, принимающего первый аргумент типа ‘System.Удалось найти Nullable’ (вам не хватает директивы using или ссылки на сборку?)

Как мне получить день, месяц, год для nullable datetime?

Ответ №1:

Вам придется использовать .Value свойство в вашем nullable:

 c.StartDate.Value.Day.ToString()  //etc
  

После проверки на null вы могли бы:

  c.StartDate.Value.ToString("dd-MMM-yyyy");
  

Комментарии:

1. Но при необходимости сначала проверьте значение HasValue

2. Я бы также добавил нулевую проверку или использование . GetValueOrDefault() на всякий случай.

3. В качестве альтернативы, вы можете назначить новую переменную, приведенную к ненулевому DateTime — var startDate = (DateTime)c.StartDate; , и тогда startDate.Day это должно сработать.

Ответ №2:

 if(c.StartDate.HasValue)
{
  DateTime sd = c.StartDate.Value;
  str = sd.Day.ToString()   "/"   sd.Month.ToString()   "/"   sd.Year.ToString()
}
else
  str = "some alternative for when there's no date";
  

Еще проще:

 string str = c.StartDate.HasValue ? c.StartDate.value.ToString(@"d/M/yyyy") ? "some alternative for when there's no date";
  

Ответ №3:

 if(c.EndDate.HasValue)
{
    c.EndDate.Value.Day.ToString()   ...
}
  

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

Ответ №4:

Каким бы вы хотели видеть результат? «//»

Вы могли бы создать методы расширения, которые возвращают «», но у вас все еще есть проблема с тем, каким вы хотите, чтобы на самом деле был конечный результат.