可为null的dateTime而不丢失方法

本文关键字:方法 null dateTime 可为 | 更新日期: 2023-09-27 18:28:49

我制作了一个方法来将datetime对象转换为仅限日期的格式。为了访问它,我必须将参数的值分配给数据表中的值。因此,显而易见的方法是在DateTime对象之后添加一个?,使其可以为null,但这会删除它的方法(或者至少是我需要使用的方法),使我的方法变得毫无价值。

string dateWithOutTime(DateTime? datetime)
{
    string reply = datetime.Date.ToString();
    return reply;
}

用法:

string str = dateWithOutTime(*DataSet*.*DataTable[n]*.Rows[n][n] as DateTime?);

有没有一种方法可以在不添加任何额外对象的情况下实现这一点?

注意:星号(*)表示变量类型/对象

可为null的dateTime而不丢失方法

DateTime?的方法与DateTime不同,它们是不同的类型。您必须使用DateTime?Value属性检索实际的日期时间值:

string dateWithOutTime(DateTime? datetime)
{
    if(datetime.HasValue)
        return datetime.Value.Date.ToString();
    else
        return //...
}

请在此处阅读Nullable<T>的文档。

除非我误解了你的问题,否则我认为你需要检查你的DateTime?参数是否为null。如果是,则返回一个空字符串(或要为缺少的日期显示的字符串)。如果不是,则可以使用Value属性:

string dateWithOutTime(DateTime? datetime)
{
    return datetime.HasValue ? datetime.Value.Date.ToString() : String.Empty;
}

更新

如果只希望字符串中的日期部分是区分区域性的,则可以使用ToShortDateString()而不是ToString()。您甚至可以省略Date属性:

string dateWithOutTime(DateTime? datetime)
{
    return datetime.HasValue
        ? datetime.Value.ToShortDateString()
        : String.Empty;
}