亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何將時間四舍五入到最接近的X分鐘?

如何將時間四舍五入到最接近的X分鐘?

C#
守候你守候我 2019-10-16 13:08:10
有舍入一個簡單的函數UP一DateTime到最近的15分鐘?例如2011-08-11 16:59 變成 2011-08-11 17:002011-08-11 17:00 保持為 2011-08-11 17:002011-08-11 17:01 變成 2011-08-11 17:15
查看完整描述

3 回答

?
絕地無雙

TA貢獻1946條經驗 獲得超4個贊

DateTime RoundUp(DateTime dt, TimeSpan d)

{

    return new DateTime((dt.Ticks + d.Ticks - 1) / d.Ticks * d.Ticks, dt.Kind);

}

例:


var dt1 = RoundUp(DateTime.Parse("2011-08-11 16:59"), TimeSpan.FromMinutes(15));

// dt1 == {11/08/2011 17:00:00}


var dt2 = RoundUp(DateTime.Parse("2011-08-11 17:00"), TimeSpan.FromMinutes(15));

// dt2 == {11/08/2011 17:00:00}


var dt3 = RoundUp(DateTime.Parse("2011-08-11 17:01"), TimeSpan.FromMinutes(15));

// dt3 == {11/08/2011 17:15:00}


查看完整回答
反對 回復 2019-10-16
?
手掌心

TA貢獻1942條經驗 獲得超3個贊

提出了一種不涉及相乘和除法 的解決方案long。


public static DateTime RoundUp(this DateTime dt, TimeSpan d)

{

    var modTicks = dt.Ticks % d.Ticks;

    var delta = modTicks != 0 ? d.Ticks - modTicks : 0;

    return new DateTime(dt.Ticks + delta, dt.Kind);

}


public static DateTime RoundDown(this DateTime dt, TimeSpan d)

{

    var delta = dt.Ticks % d.Ticks;

    return new DateTime(dt.Ticks - delta, dt.Kind);

}


public static DateTime RoundToNearest(this DateTime dt, TimeSpan d)

{

    var delta = dt.Ticks % d.Ticks;

    bool roundUp = delta > d.Ticks / 2;

    var offset = roundUp ? d.Ticks : 0;


    return new DateTime(dt.Ticks + offset - delta, dt.Kind);

}

用法:


var date = new DateTime(2010, 02, 05, 10, 35, 25, 450); // 2010/02/05 10:35:25

var roundedUp = date.RoundUp(TimeSpan.FromMinutes(15)); // 2010/02/05 10:45:00

var roundedDown = date.RoundDown(TimeSpan.FromMinutes(15)); // 2010/02/05 10:30:00

var roundedToNearest = date.RoundToNearest(TimeSpan.FromMinutes(15)); // 2010/02/05 10:30:00


查看完整回答
反對 回復 2019-10-16
?
臨摹微笑

TA貢獻1982條經驗 獲得超2個贊

void Main()

{

    var date1 = new DateTime(2011, 8, 11, 16, 59, 00);

    date1.Round15().Dump();


    var date2 = new DateTime(2011, 8, 11, 17, 00, 02);

    date2.Round15().Dump();


    var date3 = new DateTime(2011, 8, 11, 17, 01, 23);

    date3.Round15().Dump();


    var date4 = new DateTime(2011, 8, 11, 17, 00, 00);

    date4.Round15().Dump();

}


public static class Extentions

{

    public static DateTime Round15(this DateTime value)

    {   

        var ticksIn15Mins = TimeSpan.FromMinutes(15).Ticks;


        return (value.Ticks % ticksIn15Mins == 0) ? value : new DateTime((value.Ticks / ticksIn15Mins + 1) * ticksIn15Mins);

    }

}

結果:


8/11/2011 5:00:00 PM

8/11/2011 5:15:00 PM

8/11/2011 5:15:00 PM

8/11/2011 5:00:00 PM


查看完整回答
反對 回復 2019-10-16
  • 3 回答
  • 0 關注
  • 915 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號