我收到的日期为2022年1月1日h:00,m:00,s:00,ms:00在一天结束时获得日期的最佳方法是什么,例如:2022年1月1日时23分,分59秒,秒59分,毫秒:九百九十九?我试了两种方法:var endOfDay = new TimeSpan(0, 23, 59, 59, 999);time = time.Add(endOfDay);和time = time.AddDays(1).AddMilliseconds(-1);
var endOfDay = new TimeSpan(0, 23, 59, 59, 999);
time = time.Add(endOfDay);
time = time.AddDays(1).AddMilliseconds(-1);
rhfm7lfc1#
这消除了所有的疑问,直到单个tick的分辨率。在下面的代码中,假设dateAndTime可以包括一个非零时间分量。
dateAndTime
dateAndTime.Date.AddDays(1).AddTicks(-1);
这是
虽然这是可行的,但通常最好考虑一种完全不依赖于时间组件的替代设计(例如,使用给定日期的第二天午夜作为给定参考日期的虚拟日结束时间)。
00jrzges2#
如果您只想打印出范围,则操作格式是基于意见的。但是,如果您想检查某个时间是否在一天之内,请按如下方式操作(注意>=和<)
>=
<
if (timeOfQuestion >= day.Date && timeOfQuestion < day.Date.AddDays(1)) { ... }
使用像endOfDays = time.AddDays(1).AddMilliseconds(-1)这样的构造函数是很危险的:请注意,day.Date.AddMilliseconds(999.5)-double值-应该在当天 * 之内 *。
endOfDays = time.AddDays(1).AddMilliseconds(-1)
day.Date.AddMilliseconds(999.5)
double
2条答案
按热度按时间rhfm7lfc1#
这消除了所有的疑问,直到单个tick的分辨率。在下面的代码中,假设
dateAndTime
可以包括一个非零时间分量。这是
虽然这是可行的,但通常最好考虑一种完全不依赖于时间组件的替代设计(例如,使用给定日期的第二天午夜作为给定参考日期的虚拟日结束时间)。
00jrzges2#
如果您只想打印出范围,则操作格式是基于意见的。但是,如果您想检查某个时间是否在一天之内,请按如下方式操作(注意
>=
和<
)使用像
endOfDays = time.AddDays(1).AddMilliseconds(-1)
这样的构造函数是很危险的:请注意,day.Date.AddMilliseconds(999.5)
-double
值-应该在当天 * 之内 *。