我正在C#程序中捕获一些事件,这些事件与时间戳一起作为系统滴答计数(自开始时间以来的毫秒数)返回。
基于我看到的其他问题,我知道可以从System.Environment.TickCount
属性(或其他属性)获得相同的数字,该如何推断与收到的TickCount相对应的DateTime对象?
最佳答案
没有更多信息,您将无法做到(即使那样也可能会模棱两可)。 Environment.TickCount
返回:
一个32位带符号整数,其中包含自上次启动计算机以来经过的时间(以毫秒为单位)。
...因此,除非您能确定从某处启动计算机的时间,否则您就不走运了。您可能会发现一些注册表项或系统调用,以了解上次启动时间,但我不知道这些问题是否浮出水面。当然,您可以通过以下方式(或之后)尽快获取自己和Environment.TickCount
的近似值,并找出两者之间的差异:
public static DateTime UnreliableDateTimeFromTickCount(int tickCount)
{
DateTime now = DateTime.UtcNow;
DateTime boot = now - TimeSpan.FromMilliseconds(Environment.TickCount);
return boot + TimeSpan.FromMilliseconds(tickCount);
}
但是,即使这样,该值也会每24.9天循环一次,因此,如果计算机的启动时间超过该时间,则计数将是不确定的。
我建议尽可能避免使用
DateTime.UtcNow
-这完全在您的控制之下吗?关于c# - 来自TickCount的DateTime?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11333907/