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

时间:2010-07-29 13:29:40

标签: c# datetime

有没有简单的方法来获取DateTime.Now的“TimeMin”和“TimeMax”?

10 个答案:

答案 0 :(得分:89)

以下是我用来做的两个扩展。

    /// <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);
    }

这允许你写:

DateTime.Now.AbsoluteEnd() || DateTime.Now.AbsoluteStart()

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

Console.WriteLine("Start := " + partyTime.AbsoluteStart().ToString());
Console.WriteLine("End := " + partyTime.AbsoluteEnd().ToString());

答案 1 :(得分:12)

我会使用以下内容:

DateTime now = DateTime.Now;
DateTime startOfDay = now.Date;
DateTime endOfDay = startOfDay.AddDays(1);

并使用< endOfDay代替<= endOfDay。这意味着无论精度是分钟,秒,毫秒,刻度还是其他,它都能工作。这样可以防止the one we had on StackOverflow之类的错误(虽然建议是ignored)。

请注意,如果您想要同一天的开始和结束,只需拨打DateTime.Now一次就很重要。

答案 2 :(得分:10)

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

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

DateTime currentDateTime = DateTime.Now;
DateTime timeMin = currentDateTime.Date; 
DateTime timeMax = currentDateTime.Date.AddDays(1).AddTicks(-1)

答案 3 :(得分:2)

上面对猎人解决方案的一个小调整...... 我使用以下扩展方法来结束一天:

public static DateTime EndOfDay(this DateTime input) {
    return input.Date == DateTime.MinValue.Date ? input.Date.AddDays(1).AddTicks(-1) : input.Date.AddTicks(-1).AddDays(1);
}

这应该处理DateTime为DateTime.MinValueDateTime.MaxValue的情况。如果在DateTime.MaxValue上调用AddDays(1),则会出现异常。同样,在DateTime.MinValue上调用AddTicks(-1)也会抛出异常。

答案 4 :(得分:1)

像其他回答者一样,我不太确定你要求的是什么,但是你希望尽可能少的时间和最大的时间(不仅仅是一天),那么DateTime.MinValueDateTime.MaxValue返回1/1/0001 12:00:00 AM  分别于12/31/9999 11:59:59 PM。

答案 5 :(得分:1)

我建议你看看这个答案: How can I specify the latest time of day with DateTime

如果您的原始日期时间也可能包含时间,则使用AddDays()方法将添加完整的24小时,这可能不是您想要的。

答案 6 :(得分:1)

    public static DateTime ToEndOfDay(this DateTime time)
    {
        var endOfDaySpan = TimeSpan.FromDays(1).Subtract(TimeSpan.FromMilliseconds(1));
        return time.Date.Add(endOfDaySpan);
    }

答案 7 :(得分:1)

你必须小心使用

(new DateTime()).AddDays(1).AddTicks(-1);

传递给存储过程时。

可能会发生该值将近似于第二天。

答案 8 :(得分:0)

请注意,如果您将此时间传递给sql server,则应使用

dateTime.Date.AddDays(1).AddMilliseconds(-3);

请参阅:

How do I get the last possible time of a particular day

答案 9 :(得分:0)

DateTime.Today.AddDays(1).AddSeconds(-1);

不是很确切,但解决了我的问题。现在我们可以使用AddMilliseconds,AddTicks等。我认为它只会满足您的需求。