技术开发 频道

如何获取没有时间的DateTime

  【IT168 技术】这是一个平时经常遇到的问题,所以想要提供一点也许对大家有用的简单提示。

  排除时间部分

  在SQL Server和VistaDB中,都可以通过这种方法实现从DateTime中排除时间部分。

  代码:

  -- SET SOME DATE WITHOUT A TIME (doesn't matter what it is)
  declare @somedateonly datetime;
  
set @somedateonly = '2000-01-01 00:00:00';
  
SELECT DATEADD(dd, DATEDIFF(dd, @somedateonly, GETDATE() ),@somedateonly );

 

  也可以在单独的语句中实现。对于这里的数据来讲,没有时间元件不是什么问题。

SELECT DATEADD(dd, DATEDIFF(dd, '2000-01-01 00:00:00', GETDATE() ), '2000-01-01 00:00:00' );

  这样做真的可以实现吗?是的,这样可以删去GETDATE()调用和输入的DateTime,之后加入不带具体时间的数据。我们就得到没有不需要的时间部分的数据结果了。

  .NET不能够抛0给一个Datetime

  在SQL Server中可以传递0给时间数据,但在.NET中不可以抛0给时间数据。所以,这就是为什么不能够使用VistaDB一样的语法。在.NET下,我们没有办法将0抛给时间数据,这就是我们的托管代码不能100%的应用在.Net 2的运行引擎下。

  DateTime targetdateonly = (DateTime)0; // Does not work
  
DateTime targetdateonly = Convert.ToDateTime(0); // Does not work

 

  就是说我们不能只通过VistaDB的DateAdd功能传递0给时间数据。在.NET下,我们没有办法转化DateTime,而且要记住,在SQL Server中显示最新日期的方式与在.NET中是不同的。

0
相关文章