2016-09-27 3 views
0

Я получаю время от базы данных, полученной как класс TimeSpan. Для того чтобы diplay как Am/PM, я переключил его на DateTimeПолучить значение Am/PM от Nullable TimeSpan

@string.Format("{0:hh:mm:ss tt}", new DateTime().Add(t.BegTime)) 

Это сработало.

Как только я изменил TimeSpan, чтобы Nulls перестали работать. Зачем? И как мне это исправить?

ответ

1

Try ...

@string.Format("{0:hh:mm:ss tt}", new DateTime().Add(t.BegTime.HasValue ? t.BegTime.Value : new TimeSpan(0, 0, 0))); 

Этот ответ также предполагает t.BegTime является обнуляемым TimeSpan

+0

Почему, когда я делаю это, значение NULL отображается как 12AM ?? –

+0

Вот что такое TimeSpan (0, 0, 0). Если вы хотите, чтобы null DateTime создавал что-то еще, вам просто нужно заменить TimeSpan (0, 0, 0) тем, что вы хотите. – Kevin

+0

Дело в том, что вы не можете использовать string.Format на нулевом значении, поэтому вам нужно обнаружить нули и предоставить подходящее значение для форматирования. – Kevin

0

Попробуйте это ...

@string.Format("{0:hh:mm:ss tt}", new DateTime().Add(t.BegTime.Value)) 

Обнуляемые типа имеют свойство "Value". См. https://msdn.microsoft.com/en-us/library/ydkbatt6(v=vs.110).aspx для получения дополнительной информации.

EDIT: Как указал Игорь, этот код не будет работать, если BegTime - Null. Вы по-прежнему несете ответственность за обертку с помощью инструкции охраны, чтобы проверить эту возможность.

+0

Правда, не следует считать, что ОП знает. Я отредактирую. – dazedandconfused

+1

Я предполагаю, что BegTime - это нулевое время, а t - другая структура (строго типизированная строка или аналогичная), поскольку TimeSpan не имеет свойства BegTime. Возможно, ОП может уточнить. – dazedandconfused

+0

Правильно! Благодаря! –