【问题标题】:How to convert the time in millisecs to DateTime?如何将时间以毫秒为单位转换为 DateTime?
【发布时间】:2014-05-21 13:55:40
【问题描述】:

关于这个话题有很多想法,但这个是关于 Win32/WinEventProc 的 dwmsEventTime。

MSDN http://msdn.microsoft.com/en-us/library/windows/desktop/dd373885(v=vs.85).aspx 声明它是以毫秒为单位的事件时间,但没有提供进一步的解释。毫秒从哪里来?

这是该事件返回的示例值:

dwmsEventTime: 1209382650 
DateTime.Now:  05/21/2014 16:49:37  (this should be very close to dwmsEventTime)

有谁知道如何将此参数转换为 .NET DateTime()?

【问题讨论】:

标签: c# winapi


【解决方案1】:

你可以试试这样的:

static DateTime GetDateTimeFromMillisecondNumber(int millisecCount)
{
  return DateTime.Now.AddMilliseconds(millisecCount - Environment.TickCount);
}

但请注意,如果系统在获得millisecCount 后重新启动,则会返回垃圾。如果它在与您获得计数的机器不同的机器上运行,则相同。

此外,这只是正确的“模 49.7 天”,即正确的日期和时间可能是 49.7 天的整数倍,大于或小于我的方法返回的值。

【讨论】:

  • 没有问题。 TickCount 和 dwmsEventTime 都将在重新启动时重置。也没有模数问题,2 的补码会处理它,并且回调永远不会需要 49 天才能被调用。只是不要在 VB.NET 中这样做,它会发出 OverflowException。
  • 我刚刚将“int millisecCount”更改为“uint millisecCount”并且工作了! - 谢谢! :)
  • @meraydin 当心!您的减法将作为long 减法执行,并且您不会得到相同的“环绕”行为。如果你需要uint,我建议你在减去之前转换为int,即static DateTime GetDateTimeFromMillisecondNumber(uint millisecCount) { return DateTime.Now.AddMilliseconds((int)millisecCount - Environment.TickCount); }。请这样做。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-07
  • 2022-11-27
  • 2015-04-09
  • 1970-01-01
  • 2022-01-17
相关资源
最近更新 更多