Is there a simple function for rounding a DateTime down to the nearest 30 minutes, in C#?

后端 未结 7 1069
佛祖请我去吃肉
佛祖请我去吃肉 2020-12-02 01:35

For example:

2011-08-11 16:59 becomes 2011-08-11 16:30

7条回答
  •  心在旅途
    2020-12-02 02:24

    DateTime RoundDown(DateTime dt, TimeSpan d)
    {
        return new DateTime((dt.Ticks / d.Ticks) * d.Ticks);
    }
    

    Example:

    var dt1 = RoundDown(DateTime.Parse("2011-08-11 16:59"), TimeSpan.FromMinutes(30));
    // dt1 == {11/08/2011 16:30:00}
    
    var dt2 = RoundDown(DateTime.Parse("2011-08-11 17:00"), TimeSpan.FromMinutes(30));
    // dt2 == {11/08/2011 17:00:00}
    
    var dt3 = RoundDown(DateTime.Parse("2011-08-11 17:01"), TimeSpan.FromMinutes(30));
    // dt3 == {11/08/2011 17:00:00}
    

提交回复
热议问题