如何更改DateTime对象以通过强制转换来删除时间部分?

本文关键字:转换 删除 时间部 DateTime 何更改 对象 | 更新日期: 2023-09-27 17:50:45

我有一个类型为DateTime的属性?(可以为空).

当前它绑定到一个网格,时间戳显示在网格中。

我可以修改我的属性,使它以某种方式忽略时间戳类似于ToShortDateString,但不将其转换为字符串?

如何更改DateTime对象以通过强制转换来删除时间部分?

你可以使用组件的格式化器,像下面的例子:

<asp:BoundField HeaderText="Data Emissão" DataField="DT_EMIS" DataFormatString="{0:d}" ></asp:BoundField>

不要在源代码处这么做。

类型DateTime的对象总是日期和时间。你不能把它们分开。

您可以使用.Date属性将时间设置为午夜,但这不会从变量中删除时间元素。

这有时是有问题的,因为在某些时区(如巴西)有天,在春季夏令时过渡期间不存在午夜。因此,一旦您开始忽略DateTime的时间部分,就不要再将其用于任何事情。你必须暂停怀疑,把它当作时间成分不存在。

在你的特殊情况下,你可能只需要传递DateTime到你的网格,作为DateTime对象,然后设置单元格的格式属性,只使用短日期格式(d)。

作为旁注,如果你在。net中寻找一个真正的只有日期的对象,你会在Noda Time库中找到它,它被称为LocalDate应该能够毫不费力地将其中一个绑定到数据网格。

DateAdd和DateDiff可以处理这个

select  getdate()
    , dateadd(d,0,datediff(d,0,getdate()))

datediff函数计算从0到今天的天数

然后dateadd将该天数加到0,得到从0开始的天数,有效地截断时间戳

这可以很容易地在代码中完成。

DateTime dt = <some_date_with_time>;
DateTime dateonly = dt.Date;

但是如果你只想改变显示的内容,通常最好在display组件中做

为什么不直接更改属性,使其只返回日期部分呢?例如

代替:

public DateTime? MyDateTime
{
    get { return _myDateTime; }
}
private DateTime? _myDateTime;

您可以更改属性以只返回日期部分:

public DateTime? MyDateTime
{
    get 
    { 
        if (_myDateTime == null) return null;
        return _myDateTime.Value.Date; 
    }
}
private DateTime? _myDateTime;

或者甚至添加一个只包含日期部分的新属性:

public DateTime? MyDateTime
{
    get { return _myDateTime; }
}
private DateTime? _myDateTime;
public DateTime? MyDateOnly
{
    get 
    { 
        if (MyDateTime == null) return null;
        return MyDateTime.Value.Date; 
    }
}