为了账号安全,请及时绑定邮箱和手机立即绑定

如何将日期时间舍入到最接近的第 200 毫秒?

如何将日期时间舍入到最接近的第 200 毫秒?

C#
小唯快跑啊 2021-06-23 09:08:00
在我正在编写的 C#.Net 应用程序中,我希望将一些 DateTime 值四舍五入到最接近的第 200 毫秒。我想出了以下代码;   public static DateTime RoundToTheTwoHundredthMillisecond(DateTime dt) {                    var ms = dt.Millisecond;        var s = dt.Second;        var m = dt.Minute;        var h = dt.Hour;        var d = dt.Day;        var M = dt.Month;        var y = dt.Year;        if (ms >= 900 && ms < 1000) ms = 1000;         if (ms >= 700 && ms < 900) ms = 800;        if (ms >= 500 && ms < 700) ms = 600;        if (ms >= 300 && ms < 500) ms = 400;        if (ms >= 100 && ms < 300) ms = 200;        if (ms >= 0 && ms < 100) ms = 0;        // 1000 is an invalid millisecond. We need to round up a second. Use AddSeconds so it will automatically roll up should we be 1 second away from a new minute, 1 minute away from a new hour...etc...leap years and months are handled also....        if (ms == 1000) {                            return new DateTime(y, M, d, m, h, s, 0, dt.Kind).AddSeconds(1);        }         else {            return new DateTime(y, M, d, m, h, s, ms, dt.Kind);        }                         }我认为它可能有效。但是我想知道是否有人可以向我指出一种可能比我的摸索更可靠的方法?或者,也许,这是一个人会/应该为其编写单元测试的东西吗?(这样做似乎也容易引起我自己的摸索)
查看完整描述

2 回答

?
largeQ

TA贡献2039条经验 获得超7个赞

您可以只除以 200,四舍五入并乘以返回值。你也可以只减去原始的差异DateTime,不需要重建它的组件我的组件。


public static DateTime RoundToTheTwoHundredthMillisecond(DateTime dt)

{

    var ms = Math.Round(dt.Millisecond / 200.0) * 200;

    return dt.AddMilliseconds(ms- dt.Millisecond);

}

编辑


为了模仿if我们可以使用的确切序列MidpointRounding


public static DateTime RoundToTheTwoHundredthMillisecond(DateTime dt)

{

    var ms = Math.Round(dt.Millisecond / 200.0, MidpointRounding.ToEven) * 200;

    return dt.AddMilliseconds(ms- dt.Millisecond);

}


查看完整回答
反对 回复 2021-06-26
  • 2 回答
  • 0 关注
  • 137 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信