













DateTime.Now并不是只精确到秒,它后续还有毫秒
这本来是个很简单的知识点,但是有时候一个没注意,就会导致程序的执行超出预期,需要谨慎使用,
比如下面这段代码,理论上count最终应该为0,但是实际运行结果却是128,超出了预期
public void Start() { DateTime dt = new DateTime(2026, 5, 7, 1, 1, 2); //具体的时间,没有毫秒 DateTime dtNow = new DateTime(2026, 5, 7, 1, 1, 4, 560); //本来是DateTime.Now;此处演示为了方便指定时间 DateTime et = dtNow.AddSeconds(-4); //获取4秒前的时间点,按照预期理论上应该是2026-5-7 1:1:0,和dt相差2秒 int count = 256; if (dt > et) { count -= (int)(dt - et).TotalSeconds * 128; //但是实际上相差1.44秒,再用int一转,就变成1秒了 } Console.WriteLine(count); }
如果想要保持预期,就需要将DateTime.Now精确到秒,
/// <summary> /// 将时间精确到秒,忽略秒之后的数值,避免影响计算 /// </summary> public static DateTime RoundSecond(this DateTime dt) { return new DateTime(dt.Year, dt.Month, dt.Day, dt.Hour, dt.Minute, dt.Second); }
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。