DateTime.Now - 当天的第一分钟和最后一分钟

Rod*_*Rod 41 c# datetime

有没有简单的方法来获得DateTime.Now" TimeMin"和" TimeMax"?

hun*_*ter 94

这是我用来完成的两个扩展.

    /// <summary>
    /// Gets the 12:00:00 instance of a DateTime
    /// </summary>
    public static DateTime AbsoluteStart(this DateTime dateTime)
    {
        return dateTime.Date;
    }

    /// <summary>
    /// Gets the 11:59:59 instance of a DateTime
    /// </summary>
    public static DateTime AbsoluteEnd(this DateTime dateTime)
    {
        return AbsoluteStart(dateTime).AddDays(1).AddTicks(-1);
    }
Run Code Online (Sandbox Code Playgroud)

这允许你写:

DateTime.Now.AbsoluteEnd() || DateTime.Now.AbsoluteStart()
Run Code Online (Sandbox Code Playgroud)

要么

DateTime partyTime = new DateTime(1999, 12, 31);

Console.WriteLine("Start := " + partyTime.AbsoluteStart().ToString());
Console.WriteLine("End := " + partyTime.AbsoluteEnd().ToString());
Run Code Online (Sandbox Code Playgroud)

  • 我们并不总是想要今天 (7认同)
  • 我最喜欢这个,虽然我可能会建议更改返回AbsoluteStart(dateTime).AddDays(1).AddMilliseconds(-1); 返回AbsoluteStart(dateTime).AddDays(1).AddTicks(-1); 由于DateTime下降到Ticks保真度,你可能仍然会在第二天23:59:59.999和00:00:00之间得到DateTime. (7认同)
  • `DateTime.Now.AbsoluteStart()`是多余的,因为它与`DateTime.Today`相同.`DateTime.Today`是"设置为今天日期的对象,时间组件设置为00:00:00." - MSDN (3认同)
  • 你的意思是dateTime.Date? (2认同)

Mar*_*ers 12

我使用以下内容:

DateTime now = DateTime.Now;
DateTime startOfDay = now.Date;
DateTime endOfDay = startOfDay.AddDays(1);
Run Code Online (Sandbox Code Playgroud)

并使用< endOfDay而不是<= endOfDay.这意味着无论精度是分钟,秒,毫秒,刻度还是其他,它都能工作.这将防止我们在StackOverflow上遇到的错误(尽管建议被忽略).

请注意,DateTime.Now如果您想要同一天的开始和结束,则只需拨打一次即可.


Dan*_*son 10

尝试

//midnight this morning
DateTime timeMin = DateTime.Now.Date; 
//one tick before midnight tonight
DateTime timeMax = DateTime.Now.Date.AddDays(1).AddTicks(-1) 
Run Code Online (Sandbox Code Playgroud)

如果您使用它进行过滤,正如您的评论所示,将DateTime.Now保存到变量中可能是个好主意,以防两个调用之间的日期结束.非常不可能,但称它足够多次,它将不可避免地发生在一天(相当晚上).

DateTime currentDateTime = DateTime.Now;
DateTime timeMin = currentDateTime.Date; 
DateTime timeMax = currentDateTime.Date.AddDays(1).AddTicks(-1)
Run Code Online (Sandbox Code Playgroud)

  • 事实证明,它总会发生*两天*. (2认同)