none
时间转换问题 RRS feed

  • 问题

  • metro下如何获得当前时间距离公元1970年1月1日0时0分0秒经过的秒数?由于其他平台都是以此为参照。

    可metro下

     Windows::Globalization::Calendar^ cal = ref new Windows::Globalization::Calendar();
     Windows::Foundation::DateTime dateToFormat = cal->GetDateTime();

    dateToFormat.UniversalTime是到1601 年 1 月 1 日经过的纳秒数。

    请问这之间怎么转换。再就是我知道到1970年1月1日经过的秒数,怎么将期转换到UTC时间?

    2013年3月29日 7:44

全部回复

  • Hi,

    没有发现可以直接调用的API,手动计算一下好了:

     DateTime time0 = new DateTime(1970, 1, 1);
                DateTime time = DateTime.Now;
    
                Debug.WriteLine((time-time0).Ticks);
    

    转换UTC的话,DateTime里有一个ToUniversalTime方法

    Aaron
    MSDN Community Support | Feedback to us
    Develop and promote your apps in Windows Store
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2013年4月2日 8:21
    版主
  • 嗯,要通过计算一下。已经解决,下面是C++的实现

      #define WINDOWS_TICK 10000000
      #define SEC_TO_UNIX_EPOCH 11644473600LL

       static double WindowsTickToUnixSeconds(long long windowsTicks)
       {
        return (double)windowsTicks / WINDOWS_TICK - SEC_TO_UNIX_EPOCH;
       }

       static long long UnixSecondsToWindowsTick(double seconds)
       {
        unsigned long long result = SEC_TO_UNIX_EPOCH * WINDOWS_TICK;
        result += (seconds * WINDOWS_TICK);
        return result;
       }

    2013年4月8日 2:04
  • 我自己用这段代码来解析JSON的时间Ticks到DateTime


    DateTime result = new DateTime(1970, 1, 1, 0, 0, 0);
    result = result.AddTicks(ticks * 10000000);
    return result;


    Bob Bao

    Do you still use the same Windows 8 LockScreen always? Download Chameleon Win8 App quickly, that changes your LockScreen constantly.
    你是否还在看着一成不变的Windows 8锁屏而烦恼,赶紧下载这个 百变锁屏 应用,让你的锁屏不断地变化起来。

    2013年4月8日 8:39
    版主