为何TimeSpan的Milliseconds值未随时间递增?
问题分析与解决方案
嗨,这个问题我之前也踩过同款坑!核心原因是你对TimeSpan的两个毫秒相关属性理解偏差了——Milliseconds和TotalMilliseconds完全是两回事。
为什么Milliseconds会波动?
TimeSpan.Milliseconds只返回当前时间跨度里0-999范围内的毫秒余数,也就是“秒以下的毫秒部分”。举几个直观例子:
- 如果时间跨度是1234毫秒(1秒234毫秒),
Milliseconds返回234 - 如果时间跨度是2000毫秒(2秒整),
Milliseconds返回0 - 如果时间跨度是2500毫秒(2秒500毫秒),
Milliseconds返回500
哪怕你的LastUpdate完全没变化,随着时间推移,每次计算的timeSpan的毫秒余数会在0-999之间循环,自然就出现了你看到的100-900波动情况。
正确的做法:用TotalMilliseconds
如果你想得到从LastUpdate到现在的总毫秒数(持续递增的数值),一定要用TimeSpan.TotalMilliseconds。它会返回一个double类型的值,代表整个时间跨度的总毫秒数——比如1.5秒就是1500.0,3.2秒就是3200.0,完全符合你预期的“持续增大”效果。
修正后的代码示例:
// 确保data.LastUpdate仅初始化一次,未被后续代码修改 TimeSpan timeSpan = DateTime.Now - data.LastUpdate; // 输出总毫秒数,会随时间持续递增 Debug.Log(timeSpan.TotalMilliseconds);
如果需要整数形式的总毫秒数,可以强制转换为长整型:
Debug.Log((long)timeSpan.TotalMilliseconds);
内容的提问来源于stack exchange,提问作者WDUK
相关产品推荐
相关产品推荐

