如何在 Windows Mobile 程序中获得包含 Millisecond 的 DateTime

在我们编写的 Windows CE 或 Windows Mobile 应用程序中,常常通过调用 System.DateTime.Now 来获得设备的当前时间。我们可以利用设备的当前时间给变量和控件赋值,或者生成单据号和主键字段值等。不过,细心的你可能已经发现,在 Windows Mobile 应用程序中每次调用 System.DateTime.Now 获取到的 DateTime,它的 Millisecond 值始终为 0。这难道是 .NET Compact Framework 的 bug?事实上就算你用 Native 代码调用 GetLocalTime 或 GetSystemTime API 函数,得到的时间的毫秒也是 0。
那么,有没有办法在 Windows Mobile 程序中获得包含 Millisecond 的 DateTime 呢?办法是有的,不过没有直接的,需要自己编写一点代码来实现。OpenNETCF 顾问 Chris Tacke 就介绍了一种方法,利用 System.Environment.TickCount 获取系统启动后经过的毫秒数,再整除以 1000 得到一个一秒以内的时间差,之后可以利用这个时间差来计算出当前 DateTime 时间的 Millisecond 值。
详细的原理阐述和具体的代码实现就不再这里粘贴了,需要的朋友可以阅读《Getting a Millisecond-Resolution DateTime under Windows CE》一文,文章还附带了打包的示例代码PDF格式提供下载。
在分布式环境下,一般会选择 GUID 或精确到毫秒的时间(DateTime)作为在设备上新增数据的唯一标识,以避免数据提交到中央服务器后出现主键冲突。关于这个话题可以阅读我N久前写的《在PPC上用时间做唯一编号遇到的问题及其解决方法》。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值