我如何使用DateTime指定一天的最新时间?

我正在使用System.DateTime对象来允许用户select一个date范围。 用户只能使用第三方日历select一个date(不是时间),所以我需要自动指定date之后它应该使用的时间(即:00:00:00或23:59:59)被选中。

如何通过日历select器指定date已存储为DateTime对象之后的时间? 我可以使用AddHours, AddMinutes, AddSeconds方法,但那些相对于当前时间可能不是00:00:00。

startDate将需要00:00:00的时间, endDate的时间为23:59:59来解释整个日子。

如果您已经创build了一个DateTime对象,并且希望将该时间replace为该给定date的.Date PM,则可以使用.Date属性将时间设置为00:00:00,然后添加小时,分钟和秒钟。 例如:

 var dt = yourDateInstance.Date.AddHours(23).AddMinutes(59).AddSeconds(59); 

如果最近一次,你的意思是11:59:59 PM,那么这也应该工作:

 var dt = new DateTime(Now.Year, Now.Month, Now.Day, 23, 59, 59); 

为了获得今天的最后一刻:

 DateTime d = new DateTime(Now.Year, Now.Month, Now.Day); d = d.AddDays(1); d = d.AddTicks(-1); 

回应你的编辑,这是我会做的:

 DateTime start = new DateTime(Now.Year, Now.Month, Now.Day); DateTime end = start.AddDays(1).AddTicks(-1); // Or - just use end = start.AddDays(1), and use a < for comparison 
 DateTime d = DateTime.Today.AddDays(1).AddTicks(-1); 

你的问题已经得到了答复,但恕我直言,一个更好的办法是不要打扰试图减去一个滴答声,第二,或从范围的最后,并使用严格比较使用。

所以,如果你想在从startDate到endDate的包含范围内的所有date,忽略时间,你可以在C#中使用以下内容:

 if ((myDate >= startDate.Date) && (myDate < endDate.Date.AddDays(1))) { // ... it's in the range } 

或者在T-SQL中,假设你的@StartDate和@EndDate恰好是午夜,如下所示:

 WHERE SomeDate >= @StartDate AND SomeDate < DATEADD(d,1,@EndDate) 

UPDATE

更新示例以显示包含范围以响应评论。

 DateTime startDate = DateTime.Today; DateTime stopDate = startDate.AddDays(1).AddTicks(-1); 

作为一个说明, DateTime.Today返回(从MSDN)

System.DateTime设置为今天的date,时间组件设置为00:00:00。

正如其他人所指出的,添加一天,然后减去最小时间量(一个滴答声),并获得当天的最后时间。

当然,您可能需要考虑时区等,这取决于代码运行的位置和用户的位置。 UTC的时间可能是好的,但是这可能会让你的一天(两种方式),取决于你的代码运行。

例如

 DateTime.Now.Date.AddDays(1).AddSeconds(-1) 

AddTicks/AddMilliseconds/AddMinutes …根据您需要的精度。

用这个

DateTime YourNewDate = new DateTime(YourDate .Year,YourDate .Month,YourDate .Day,23,59,59,99);

yourDateInstance.CloseDate = yourDateInstance.CloseDate.Date.AddDays(1).AddMilliseconds(-1);

基于其他答案,我创build了这个方便的扩展方法:

 public static class DateTimeExtensions { public static DateTime EndOfDay(this DateTime dateTime) { return dateTime.Date.AddDays(1).AddTicks(-1); } } 

这会给你预期的结果:

 DateTime startDate= DateTime.Now.Date; DateTime endDate= startDate.AddDays(2).Add(new TimeSpan(23, 59, 59)); //startDate: 28/9/2017 0:0:0 endDate: 29/9/2017 23:59:59