关于网络校时时间转换的算法
当前我正在写一个网络校时的小应用,在网上看了一下别人写的代码,有一段算法不是很懂.请各位大侠帮忙解释一下,谢谢.
如下:
其中ulTime是从校时服务器发过来的从1900年1月1日到现在已经经过的秒数,有两个问题:
1。根据返回来的时间,我觉得服务器已经把时区考虑在内了,可能是根据发起连接的IP判断你当前所在的时区,再把相应的秒数发回来的,但是没有找到确定的依据。
2。这里有一段的算法不是很明白他为什么要这么写,哪位大侠不吝指点一下,谢谢。
SystemTimeToFileTime(&st, &ft);
li = *(LARGE_INTEGER*)&ft;
li.QuadPart += (LONGLONG)10000000 * ulTime;
ft = *(FILETIME*)&li;
FileTimeToSystemTime(&ft, &st);
SetSystemTime(&st);
- C/C++ code
LOCAL void MySetTime(uint32 ulTime){ FILETIME ft; SYSTEMTIME st; LARGE_INTEGER li; st.wYear = 1900; st.wMonth = 1; st.wDay = 1; st.wHour = 0; st.wMinute = 0; st.wSecond = 0; st.wMilliseconds = 0; SystemTimeToFileTime(&st, &ft); li = *(LARGE_INTEGER*)&ft; li.QuadPart += (LONGLONG)10000000 * ulTime; ft = *(FILETIME*)&li; FileTimeToSystemTime(&ft, &st); SetSystemTime(&st);}[解决办法]
1一般通信中网络传输都是用utc时间,客户端接收后自己根据时区调整成本地时间展示给用户。
2只是得到了一个时间差ulTime的话,这么做是为了给定的时间转成结构SYSTEMTIME st
你也可以使用c语言库中的函数进行转化。