我想要在Windows Mobile项目的日志中添加一个时间戳。精确度必须至少达到百毫秒。
然而,我的调用DateTime.Now
返回一个DateTime
对象,其中Millisecond
属性设置为零。同时,Ticks
属性也相应地四舍五入了。
如何获得更好的时间精度?
请记住,我的代码运行在Compact Framework 3.5上。我使用HTC Touch Pro 2设备。
基于MusiGenesis的答案,我创建了以下类来解决这个问题:
/// <summary>
/// A more precisely implementation of some DateTime properties on mobile devices.
/// </summary>
/// <devdoc>Tested on a HTC Touch Pro2.</devdoc>
public static class DateTimePrecisely
{
/// <summary>
/// Remembers the start time when this model was created.
/// </summary>
private static DateTime _start = DateTime.Now;
/// <summary>
/// Remembers the system uptime ticks when this model was created. This
/// serves as a more precise time provider as DateTime.Now can do.
/// </summary>
private static int _startTick = Environment.TickCount;
/// <summary>
/// Gets a DateTime object that is set exactly to the current date and time on this computer, expressed as the local time.
/// </summary>
/// <returns></returns>
public static DateTime Now
{
get
{
return _start.AddMilliseconds(Environment.TickCount - _startTick);
}
}
}
DateTime.Now
有所偏差,可能在一天内多达几秒钟甚至更多。您可以通过设置类的_start属性,等待一段时间(一天或其他时间),并将DateTime.Now
与DateTimePrecisely.Now
进行比较来轻松测试这一点。 - MusiGenesis_start
和_startTick
的新值,并定期调用它。这将使其与系统时钟长期同步,同时仍然为您提供(据称)毫秒分辨率。或者使用ctacke
的代码。 - MusiGenesis