如何将DateTime设置为一天的开始/结束?
c#
我想计算本周的开始DateTime和结束DateTime时间。首先,我创建了一个包含两个信息的类
internal class ReportTimeSpan
{
public DateTime From { get; set; }
public DateTime To { get; set; }
}
之后这是我的计算
public ReportTimeSpan GetTimeSpanForThisWeek()
{
int amountOfDays = GetAmountOfWeekDays();
int currentDayIndex = GetCurrentWeekDayIndex();
DateTime weekStart = DateTime.Now.AddDays(-currentDayIndex);
int differenceCurrentDayIndexToLastDayIndex = amountOfDays - currentDayIndex;
DateTime weekEnd = DateTime.Now.AddDays(differenceCurrentDayIndexToLastDayIndex);
return new ReportTimeSpan()
{
From = weekStart,
To = weekEnd
};
}
private int GetAmountOfWeekDays()
{
string[] dayNames = Enum.GetNames(typeof(DayOfWeek));
return dayNames.Length;
}
private int GetCurrentWeekDayIndex()
{
DayOfWeek dayOfWeek = DateTime.Now.DayOfWeek;
return (int)dayOfWeek;
}
}
两个值的日期都是正确的,但时间是错误的。
- 变量
weekStart的时间应该是“00:00:00” - 变量
weekEnd的时间应该是“23:59:59”(不确定)
我可以使用任何方法吗?(我不想使用外部包)
回答
我希望你想要这样的东西:
weekStart = DateTime.Now.AddDays(-currentDayIndex).Date;
正如 Tim 所说,您可以将其简化为:
weekStart = DateTime.Today.AddDays(-currentDayIndex);
.Date将删除时间组件,因此您只剩下日期和 00:00:00 时间。.Today将返回没有时间组件的今天的日期。
对于weekEnd,我们应该将一周中的天数添加到weekStart,然后后退 1 个刻度以将其带回到前一天:
weekEnd = weekStart.AddDays(7).AddTicks(-1);
您还可以使用.AddMilliseconds(-1),.AddSeconds(-1)或任何您需要安全地在前一天内的数量(某些数据库的精度低于刻度等)。
如果您有使用的原因,GetAmountOfWeekDays()那么7在上面用GetAmountOfWeekDays().
根据您使用它的目的,使用包含性weekStart和排他性nextWeekStart比较可能会更好:
weekStart = DateTime.Now.AddDays(-currentDayIndex).Date;
nextWeekStart = weekStart.AddDays(7);
bool isInWeek = someDate >= weekStart && somedate < nextWeekStart;
- Why you use `DateTime.Now` at all if you want to truncate the time, use `DateTime.Today`