.NET Compact Framework上的DateTime.Now中的毫秒总是为零?
我想为Windows Mobile项目上的日志记录时间戳 。 精度必须至少在百毫秒的范围内。
但是,我对DateTime.Now
调用返回了一个将Millisecond
属性设置为零的DateTime
对象。 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);
}
}
}
Environment.TickCount
将返回自上次重新启动以来Windows(或Windows Mobile)运行的毫秒数。
要使用这个,请将这两个表单级变量添加到您的代码中:
private DateTime _start;
private int _startTick;
在你的表单的Load事件中,执行以下操作:
private void Form1_Load(object sender, EventArgs e)
{
_start = DateTime.Now;
_startTick = Environment.TickCount;
}
每当你需要一个毫秒级的DateTime对象时,执行以下操作:
DateTime timeStamp =
_start.AddMilliseconds(Environment.TickCount - _startTick);
Environment.TickCount
是一个int
值,在25天左右之后,这个值将“包裹”到Int32.MinValue
。 如果您的设备要运行那么久而不重新启动,那么您需要添加一个小于上次读取值的Environment.TickCount
值的检查,如果是,则重置_start
和_startTick
。
这篇关于获得毫秒分辨率时间的文章可能也很有用。
高分辨率定时器呢?
链接地址: http://www.djcxy.com/p/53679.html上一篇: Milliseconds in DateTime.Now on .NET Compact Framework always zero?
下一篇: Porting a Windows Mobile 2003 compact framework app to smartphone