C# 转换日期时间?仅到日期,然后返回到日期时间?(可能吗?)

C# 转换日期时间?仅到日期,然后返回到日期时间?(可能吗?),c#,C#,我不知道这是否合理,但我有约会时间?对象,我只需要它的日期部分,但我需要它将其转换回DateTime?并仅使用日期值存储它。这可能吗 这就是我所尝试的: public DateTime? StartDate{ get; set; }; DateTime? x = Convert.ToDateTime(StartDate.Value.ToString("MM-dd-yyyy")); 如果我继续 StartDate.Value.ToString("MM-dd-yyyy") 可以,但我还是想要个约

我不知道这是否合理,但我有约会时间?对象,我只需要它的日期部分,但我需要它将其转换回DateTime?并仅使用日期值存储它。这可能吗

这就是我所尝试的:

public DateTime? StartDate{ get; set; };
DateTime? x = Convert.ToDateTime(StartDate.Value.ToString("MM-dd-yyyy"));
如果我继续

StartDate.Value.ToString("MM-dd-yyyy")
可以,但我还是想要个约会时间?对象,因为这就是我的数据库存储它的方式。我如何才能做到这一点?

您可以这样做:

DateTime? x = StartDate.HasValue //Handle when value is null
    ? StartDate.Value.Date       //If not null, get date part
    : (DateTime?)null;           //otherwise just return null
使用null条件运算符的更简单版本为:

DateTime? x = StartDate2?.Date;

如果您需要如何格式化以只显示日期组件,我也包括了这个

DateTime? onlyDate = oldData?.Date;
        if (onlyDate.HasValue)
        {
            string formattedDate = onlyDate.Value.ToString("dd/MM/yyyy"));  
            //or dd-MM-yyyy
        }
试试这个

DateTime? date = StartDate?.Date;
这就是你需要写的全部内容。
Date
属性实际上属于
DateTime
类型,它只返回一个从当天开始的实例。由于您的
StartDate
可以为null,因此使用null条件(
?。
)运算符意味着结果值也可以为null

这意味着,如果它的左手边是空的,那么它的右手边也是空的。因此,结果的类型正确
DateTime?


这种方法安全、简洁、惯用且健壮。

DateTime
有一个可以使用的
Date
属性。另外,你盲目地假设
StartDate
不是空的。我不明白你说“我仍然想要一个DateTime?对象”
StartDate
是一个
DateTime?
对象。你不需要另一个,是吗?我也尝试过这种方法,但它仍然给我12:00:00的版本,我不知道为什么。现在你谈论的是格式化显示日期。一个
DateTime
总是有一个时间成分,你不能就这样把它去掉。相反,您似乎需要告诉UI如何显示它。
DateTime
struct总是包含时间组件。你只需要在没有它的情况下展示它。非常感谢你。我现在觉得自己好笨。这很有效。@DavidG你不能用
简化一下吗<代码>日期时间?日期=StartDate.Value.date??无效语法?