SystemTimeToVariantTime 源码实现
时间: 2023-08-10 13:07:12 浏览: 34
SystemTimeToVariantTime是Windows API中的一个函数,用于将SYSTEMTIME结构体转换为DATE结构体,即将Windows系统时间转换为VariantTime。以下是SystemTimeToVariantTime的源码实现:
```C++
BOOL WINAPI SystemTimeToVariantTime(
_In_ const SYSTEMTIME *lpSystemTime,
_Out_ double *pvtime
)
{
// 参数验证
if (!lpSystemTime || !pvtime)
{
SetLastError(ERROR_INVALID_PARAMETER);
return FALSE;
}
// 将SYSTEMTIME结构体转换为FILETIME结构体
FILETIME ft;
if (!SystemTimeToFileTime(lpSystemTime, &ft))
{
return FALSE;
}
// 将FILETIME结构体转换为64位整数表示的时间
ULARGE_INTEGER ull;
ull.LowPart = ft.dwLowDateTime;
ull.HighPart = ft.dwHighDateTime;
ull.QuadPart /= 10000; // 转换为毫秒
// 计算VariantTime
*pvtime = (((double)ull.QuadPart) / (double)(24 * 3600 * 1000)) + 25569.0;
return TRUE;
}
```
该函数首先将SYSTEMTIME结构体转换为FILETIME结构体,然后将FILETIME结构体转换为64位整数表示的时间,最后根据VariantTime的规则计算出双精度浮点数表示的VariantTime。需要注意的是,VariantTime的日期起点为1900年1月1日,而系统时间的起点为1601年1月1日,因此在计算VariantTime时需要加上25569.0。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)