.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