如何将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`

以上是如何将DateTime设置为一天的开始/结束?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>