3

Я читаю дату DateTime? значение из моего представления. Теперь я проверяю, есть ли NextUpdate DateTime? HasValue, и если так, то конвертируйте это время в UTC.Как отличить DateTime к UTC DateTime

От чтения на этом кажется, что мне нужно использовать null coalescing operator, но мое назначение говорит мне, что System.NUllable не содержит определения для ToUniversalTime() при использовании этого оператора.

Я искал на SO для аналогичного вопроса, но не повезло.

Вопрос:

Как преобразовать нулевое значение DateTime в формате UTC?

Код:

Я просто проверить, если DateTime? имеет значение, и если да преобразовать этот DateTie в UTC -

  if (escalation.NextUpdate.HasValue) 
      { 
       escalation.NextUpdate = escalation.NextUpdate ?? escalation.NextUpdate.ToUniversalTime(); 
      } 
      else 
      { 
       escalation.NextUpdate = null; 
      } 

Мой NextUpdate свойство в модели:

public DateTime? NextUpdate { get; set; } 
+0

Вы имеете в виду 'escalation.NextUpdate? .ToUniversalTime()', возможно? –

+3

изменить '' escalation.NextUpdate.ToUniversalTime() '' на '' escalation.NextUpdate.Value.ToUniversalTime() '' –

+0

@EhsanSajjad выше работало :) –

ответ

6

Ваш код не соответствует длине пути.

?? Оператор возвращает левую сторону если не нулевой, в противном случае правая сторона.
Поскольку вы уже проверили, что escalation.NextUpdate.HasValue - true, левая сторона не null, и вы снова назначаете ту же дату (без конвертации в UTC).

Nullable<DateTime> не объявляет ToUniversalTime(), вам нужно сделать это по значению.

Таким образом, окончательный код должен выглядеть следующим образом:

if (escalation.NextUpdate.HasValue) 
    escalation.NextUpdate = escalation.NextUpdate.Value.ToUniversalTime(); 

или C# 6

escalation.NextUpdate = escalation.NextUpdate?.ToUniversalTime(); 

Там нет необходимости для else отрасли, как и в этом случае было бы null в любом случае.

+0

should'nt it '' эскалация. NextUpdate? .Value.ToUniversalTime() ''? –

+0

@ EhsanSajjad Я тоже так думал. Но удивительно, что это прекрасно работает. –

+0

@ EhsanSajjad, это хороший вопрос, но? оператор автоматически вызывает свойство value – MikeT

3

если вы используете C# 6, то его очень простой

escalation.NextUpdate?.ToUniversalTime(); 

это означает, что NextUpdate не является нулевым вызовом ToUniversalTime() else return null

if yo и не может использовать с # 6, то рядными, если это, вероятно, вашим лучшим выбором

escalation.NextUpdate.HasValue ? (DateTime?)escalation.NextUpdate.Value.ToUniversalTime():null; 

это в основном так же, как ваши полная, если обнажая вы пропустили свойство Value из обнуляемых и корректируете Ваше использование ?? operator

Смежные вопросы