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的余数与这个毫秒的参考零点作比较,并算出该秒的毫秒数。

转载于:https://www.cnblogs.com/Beyond-LCF/p/5074476.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值