63

使用 C#。我有一个字符串dateTimeEnd

如果字符串格式正确,我希望生成一个DateTime并将其分配给 eventCustom.DateTimeEnd 类型

public Nullable<System.DateTime> DateTimeEnd { get; set; }

如果dateTimeEnd为空或为空,我需要eventCustom.DateTimeEnd设置为空。

我正在尝试使用以下代码来实现这一点,但对于eventCustom.DateTimeEnd.

你能帮我定义我的代码有什么问题吗?

   DateTime? dateTimeEndResult;
     if (!string.IsNullOrWhiteSpace(dateTimeEnd))
        dateTimeEndResult = DateTime.Parse(dateTimeEnd);


eventCustom.DateTimeEnd = dateTimeEndResult = true ? (DateTime?)null : dateTimeEndResult;
4

7 回答 7

156

看起来你只是想要:

eventCustom.DateTimeEnd = string.IsNullOrWhiteSpace(dateTimeEnd)
    ? (DateTime?) null
    : DateTime.Parse(dateTimeEnd);

dateTimeEnd请注意,如果不是有效日期,这将引发异常。

另一种选择是:

DateTime validValue;
eventCustom.DateTimeEnd = DateTime.TryParse(dateTimeEnd, out validValue)
    ? validValue
    : (DateTime?) null;

现在将结果设置为nullif dateTimeEndis not valid。请注意,将TryParse句柄null作为输入没有问题。

于 2013-05-27T08:35:56.717 回答
21

DateTime是不可为空的值类型

DateTime? newdate = null;

你可以使用一个Nullable<DateTime>

c# 可空日期时间

于 2013-05-27T08:35:18.530 回答
3

这一行:

eventCustom.DateTimeEnd = dateTimeEndResult = true ? (DateTime?)null : dateTimeEndResult;

等同于:

eventCustom.DateTimeEnd = dateTimeEndResult = (true ? (DateTime?)null : dateTimeEndResult);

因为条件运算符?的优先级高于赋值运算符=。这就是为什么你总是为eventCustom.DateTimeEnd. (MSDN 参考

于 2013-05-27T08:41:49.810 回答
3

这应该有效:

if (!string.IsNullOrWhiteSpace(dateTimeEnd))
    eventCustom.DateTimeEnd = DateTime.Parse(dateTimeEnd);
else
    eventCustom.DateTimeEnd = null;

请注意,如果字符串的格式不正确,这将引发异常。

于 2013-05-27T08:34:40.303 回答
2

你可以写日期时间吗?新日期=空;

于 2013-05-27T08:40:44.203 回答
0

这很简单

//declare date object
maxDate: Date;
//assign value

this.maxDate=new Date(event.value._d); //event.value._d is date formate
//setting date Object to null
this.maxDate=null;
于 2021-09-17T14:54:14.740 回答
-1

现在,我不能使用DateTime?,我正在使用DBNull.Value所有数据类型。它工作得很好。

eventCustom.DateTimeEnd = string.IsNullOrWhiteSpace(dateTimeEnd)
  ? DBNull.Value
  : DateTime.Parse(dateTimeEnd);
于 2016-07-12T05:04:24.477 回答