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的餘數與這個毫秒的參考零點做比較,並算出該秒的毫秒數。spa

相關文章
相關標籤/搜索