在我正在编写的 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);
}
}
我认为它可能有效。但是我想知道是否有人可以向我指出一种可能比我的摸索更可靠的方法?或者,也许,这是一个人会/应该为其编写单元测试的东西吗?(这样做似乎也容易引起我自己的摸索)
largeQ
相关分类