如何更改DateTime对象以通过强制转换来删除时间部分?
本文关键字:转换 删除 时间部 DateTime 何更改 对象 | 更新日期: 2023-09-27 17:50:45
我有一个类型为DateTime的属性?(可以为空).
当前它绑定到一个网格,时间戳显示在网格中。
我可以修改我的属性,使它以某种方式忽略时间戳类似于ToShortDateString
,但不将其转换为字符串?
你可以使用组件的格式化器,像下面的例子:
<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;
}
}