我正在使用一个System.DateTime
对象来允许用户选择日期范围.用户只能使用第三方日历选择日期(而不是时间),因此我需要在日期之后自动指定应该使用的时间(即:00:00:00或23:59:59)被选中.
如何指定日期选择器已将日期存储为DateTime对象后的时间?我可以使用这些AddHours, AddMinutes, AddSeconds
方法,但这些方法与当前时间相关,可能不是00:00:00.
在startDate
将需要有时间是00:00:00,并endDate
有一23:59:59时间占到整个天.
Jos*_*lio 94
如果您已经DateTime
创建了一个对象并想要在该给定日期的晚上11:59:59更换时间,那么您可以使用该.Date
属性获取时间设置为00:00:00然后添加小时,分钟和秒.例如:
var dt = yourDateInstance.Date.AddHours(23).AddMinutes(59).AddSeconds(59);
Run Code Online (Sandbox Code Playgroud)
如果到了最晚时间,你的意思是晚上11:59:59,那么这也应该有效:
var dt = new DateTime(Now.Year, Now.Month, Now.Day, 23, 59, 59);
Run Code Online (Sandbox Code Playgroud)
Jon*_*n B 73
要获得今天的最后一刻:
DateTime d = new DateTime(Now.Year, Now.Month, Now.Day);
d = d.AddDays(1);
d = d.AddTicks(-1);
Run Code Online (Sandbox Code Playgroud)
为了回应您的编辑,这是我要做的:
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
Run Code Online (Sandbox Code Playgroud)
Pet*_*ier 19
DateTime d = DateTime.Today.AddDays(1).AddTicks(-1);
Run Code Online (Sandbox Code Playgroud)
Joe*_*Joe 11
你的问题已经得到了解答,但恕我直言更好的方法是不要试图从范围的末尾减去一个滴答,一秒或其他任何东西,并严格按照比较小于.
因此,如果您希望包含范围内的所有日期从startDate到endDate,忽略时间,则可以在C#中使用以下内容:
if ((myDate >= startDate.Date) && (myDate < endDate.Date.AddDays(1)))
{
// ... it's in the range
}
Run Code Online (Sandbox Code Playgroud)
或者在T-SQL中,假设您的@StartDate和@EndDate恰好是午夜,例如:
WHERE SomeDate >= @StartDate AND SomeDate < DATEADD(d,1,@EndDate)
Run Code Online (Sandbox Code Playgroud)
UPDATE
更新示例以显示响应评论的包含范围.
基于其他答案,我创建了这个方便的扩展方法:
public static class DateTimeExtensions
{
public static DateTime EndOfDay(this DateTime dateTime)
{
return dateTime.Date.AddDays(1).AddTicks(-1);
}
}
Run Code Online (Sandbox Code Playgroud)
使用扩展方法
public static DateTime EndOfTheDay(this DateTime date)
{
return new DateTime(date.Year, date.Month, date.Day).AddDays(1).AddTicks(-1);
}
Run Code Online (Sandbox Code Playgroud)
这里的结果将通过获取一天的开始时间为您提供可能的最晚时间 - 添加一天,然后减去一个刻度。其他方法添加小时、分钟和秒,但是这些取决于代码功能的解决方案将在 23:59:59.000000 和 23:59:59.999999 之间的任何时间引起问题
例如,如果我想知道某个值是否在某个结束日期/时间之前,其他解决方案可能会错过毫秒范围内的值。
DateTime startDate = DateTime.Today;
DateTime stopDate = startDate.AddDays(1).AddTicks(-1);
Run Code Online (Sandbox Code Playgroud)
作为注释,DateTime.Today
返回(来自MSDN)
System.DateTime设置为今天的日期,时间组件设置为00:00:00.
正如其他人所指出的那样,添加一天,然后减去最小的时间量(一个刻度),你得到当天最后一次可能的时间.
当然,您可能需要考虑TimeZones,这取决于代码运行的位置与用户所在的位置.UTC时间可能会很好,但这可能会让你失去一天(无论哪种方式),具体取决于代码运行的位置.
归档时间: |
|
查看次数: |
43493 次 |
最近记录: |