我如何使用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