我有一个对象,它将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 / database级别工作,但是C#似乎让它变坏了 同一记录显示为:0001-01-01 12:00:00 AM
尝试to_date
和to_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
答案 0 :(得分:1)
尝试DateTime.Date
获取一个新的DateTime
,其中只包含日期部分,时间截断为午夜。请参阅:http://msdn.microsoft.com/en-us/library/system.datetime.date%28v=vs.110%29.aspx
答案 1 :(得分:0)
这一行:
_oAuditTrail = _oAuditTrail.FindAll(Function(p1) p1.AA_ACTION_DATE = CDate(objFilterRecord))
对我来说真的很怀疑。 CDate()
来自VB.Net,而不是C#。
无论如何,正如其他答案中所提到的,您正在寻找的是DateTime
实例中的DateTime.Date
属性,根据文档,它将返回
与此实例具有相同日期的新对象和时间值 设置为午夜12:00:00(00:00:00)。
请注意,您无法“删除”DateTime对象的Time部分,因为它是数据结构的一部分,就像您无法从任何其他类“删除”任何其他属性一样,您只需将其设置为非重要值(例如,在引用类型的情况下为null
),或者只是在代码中忽略它。
因此,new DateTime(2013,11,27)
将返回11/27/2013 12:00:00 AM
,这是未明确指定的DateTime
对象的时间“部分”的默认值。
另请注意,如果您的oAuditTrail
记录以这种方式创建了日期时间,则它们都将默认为12:00:00 AM
,而不是“没有时间”,这是不可能的。 / p>
这导致了这样的结论:您的语句应该是用适当的C#而不是VB.Net并使用LINQ编写的:
_oAuditTrail = _oAuditTrail.Where(x => x.AA_ACTION_DATE.Date == someDateTime).ToList();