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

时间:2014-03-17 21:25:42

标签: c# datetime

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

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

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

6 个答案:

答案 0 :(得分:2)

您可以使用组件的格式化程序,例如:

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

答案 1 :(得分:1)

不要在源头做这件事。通过设置列格式在网格中进行。

答案 2 :(得分:1)

DateTime类型的对象总是一个日期和时间。你无法将它们分开。

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

这有时会出现问题,因为在春季前进夏令时转换期间某些时区(例如巴西) 天,其中午夜不存在。因此,一旦你开始忽略DateTime的时间部分,就不要再用它了。你必须暂停怀疑并对待它,好像时间成分不存在一样。

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

作为旁注,如果你在.Net中寻找一个真正的仅限日期的对象,你会在Noda Time库中找到它,在那里它被称为LocalDate。您能够轻松地将其中一个绑定到数据网格。

答案 3 :(得分:0)

DateAdd和DateDiff可以处理此问题。

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

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

然后dateadd将该天数添加到0以提供从0开始的整天天数,从而有效地截断时间戳。

答案 4 :(得分:0)

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

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

但如果您只想更改显示的内容,通常最好在显示组件上执行此操作。

答案 5 :(得分:0)

为什么不直接更改属性以便它只返回日期部分。 E.g。

而不是:

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; 
    }
}