想要从oracle日期删除时间,但c sharp datetime不会让我

问题描述 投票:1回答:2

我有一个对象,它将C#中的oracle日期存储为日期时间。

public DateTime AA_ACTION_DATE { get; set; }

当我运行我的查询时,我按预期得到dateformat:2013-07-04 8:58:04 AM

但是我需要对结果进行过滤,过滤器只在日期而不是时间。

 _oAuditTrail = _oAuditTrail.FindAll(Function(p1) p1.AA_ACTION_DATE = CDate(objFilterRecord))

这适用于没有时间戳的其他日期对象,因为它默认为午夜。

trunc似乎是要走的路,但是,它在toad /数据库级别工作,但C#似乎得到它同样的记录显示为:0001-01-01 12:00:00 AM

尝试了to_dateto_char并且相同的记录被破坏了:

to_date(AA_ACTION_DATE,'dd/mm/yy')返回0001-01-01 12:00:00 AM to_char(AA_ACTION_DATE,'yyyy-mm-dd')返回0001-01-01 12:00:00 AM

在这里疯了,因为它应该是一个简单的解决方案

c# vb.net datetime oracle11g
2个回答
0
投票

这一行:

 _oAuditTrail = _oAuditTrail.FindAll(Function(p1) p1.AA_ACTION_DATE = CDate(objFilterRecord))

看起来真的很怀疑我。 CDate()来自VB.Net,而不是C#。

无论如何,正如其他答案中所提到的,你正在寻找的是你的DateTime.Date实例中的DateTime属性,根据文档,它将返回

与此实例具有相同日期的新对象,时间值设置为午夜12:00:00(00:00:00)。

请注意,您不能“删除”DateTime对象的Time部分,因为它是数据结构的一部分,就像您不能从任何其他类“删除”任何其他属性一样,您可以将其设置为非重要值(比如参考类型中的null),或者只是在代码中忽略它。

因此,new DateTime(2013,11,27)将返回11/27/2013 12:00:00 AM,这是未明确指定的DateTime对象的时间“部分”的默认值。

另请注意,如果您的oAuditTrail记录以这种方式创建了DateTimes,它们将默认为12:00:00 AM,而不是“没有时间”,这是不可能的。

这导致了这样的结论:你的语句应该写成(在适当的C#而不是VB.Net并使用LINQ),如下所示:

_oAuditTrail = _oAuditTrail.Where(x => x.AA_ACTION_DATE.Date == someDateTime).ToList();

1
投票

尝试使用DateTime.Date获取一个新的DateTime,其中只包含日期部分,时间截断为午夜。见:http://msdn.microsoft.com/en-us/library/system.datetime.date%28v=vs.110%29.aspx

© www.soinside.com 2019 - 2024. All rights reserved.