WinCE下使用C#获得带毫秒的DateTime.Now

  在WinCE下,使用DateTime.Now获取的系统时间是不带毫秒的,如果想要它带毫秒,需要耍点手段。话不多说,直接上代码:

 

public static DateTimePrecisely
{
    //定义一个全局变量,用来保存一个毫秒的0点。 
    private static int m_offset = 0;

    static DateTimePrecisely()
    {
         int s = DateTime.Now.Second;
      //我们需要等待一次跨秒,来定义毫秒的0点。
while (true) { int s2 = DateTime.Now.Second; //一旦跨秒,就立刻把这个余数记录下来。 if (s != s2) { m_offset = Environment.TickCount % 1000; break; } } } public static DateTime Now { get { // 获取系统当前的毫秒数 int tick = Environment.TickCount % 1000; // 考虑两种情况,一种是当前毫秒数大于0点,一种是小于0点,两者算法是不一样的,要注意 int ms = (tick >= m_offset) ? (tick - m_offset) : (1000 - (m_offset - tick)); //好了,我们已经自己算出了毫秒,可以愉快的把毫秒加到DateTime里了。 DateTime now = DateTime.Now; return new DateTime(now.Year, now.Month, now.Day, now.Hour, now.Month, now.Second, ms); } } }

  大致思路就是,用Evironment.TickCount可以取得系统启动所运行的总毫秒数。我们要做的,就是想办法利用这个总毫秒数,为DateTime添加毫秒属性。当第一次调用DateTimePrecisely.Now时,我们等待一次跨秒并记录跨秒这一刻的总毫秒数与1000的余数,以此来作为毫秒的参考零点。之后每次调用DateTimePrecisely.Now,都会将当前的总毫秒数跟1000的余数与这个毫秒的参考零点作比较,并算出该秒的毫秒数。

posted @ 2015-12-24 22:12  李春风  阅读(2192)  评论(0编辑  收藏  举报