在WinCE下,使用DateTime.Now获取的系统时间是不带毫秒的,如果想要它带毫秒,需要耍点手段。话不多说,直接上代码:
public static DateTimePrecisely
{
//定义一个全局变量,用来保存一个毫秒的0点。
private static int m_offset = ; static DateTimePrecisely()
{
int s = DateTime.Now.Second;
//我们需要等待一次跨秒,来定义毫秒的0点。
while (true)
{
int s2 = DateTime.Now.Second;
//一旦跨秒,就立刻把这个余数记录下来。
if (s != s2)
{
m_offset = Environment.TickCount % ;
break;
}
}
} public static DateTime Now
{
get
{
// 获取系统当前的毫秒数
int tick = Environment.TickCount % ;
// 考虑两种情况,一种是当前毫秒数大于0点,一种是小于0点,两者算法是不一样的,要注意
int ms = (tick >= m_offset) ? (tick - m_offset) : ( - (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的余数与这个毫秒的参考零点作比较,并算出该秒的毫秒数。