gpt4 book ai didi

c++ - 从变量类型 System.DateTime 读取 C++ 中的日期/时间

转载 作者:太空宇宙 更新时间:2023-11-04 12:04:02 25 4
gpt4 key购买 nike

我有一个时间戳的值,由滴答数表示。通过创建一个新的 System.DateTime 对象并将时间戳值传递给构造函数,在 c# 下从中获取日期/时间很容易,或者有人告诉我(它是在 c# 中创建的)。问题是我只能使用 C/C++。甚至将刻度转换为秒也有些令人困惑。根据 cplusplus.com,简单乘以宏 CLOCKS_PER_SEC - 每秒时钟滴答数,就足够了。这导致乘以 1000。然而,根据 Microsoft 网站,转换为秒的系数应为 1e7。待转换的样本值为634400640022968750,表明第二个版本更接近实际。

我不会花时间描述我失败的尝试,因为它们让我一事无成。任何帮助将不胜感激。

最佳答案

假设您在 Windows 上,问题是 c# DateTime 从 0001 年 1 月 1 日开始,而 c++ FILETIME 从 1601 年 1 月 1 日开始,因此要获得具有 C# 值的 SYSTEMTIME,您需要这样的东西...

    ULARGE_INTEGER uliTime;
uliTime.QuadPart = 634400640022968750; // Your sample value

SYSTEMTIME stSytemTime;
memset(&stSytemTime,0,sizeof(SYSTEMTIME));

FILETIME stFileTime;
memset(&stFileTime,0,sizeof(FILETIME));

// Fill FILETIME with your value
stFileTime.dwLowDateTime = uliTime.LowPart;
stFileTime.dwHighDateTime = uliTime.HighPart;

// Convert FILETIME so SYSTEMTIME
FileTimeToSystemTime(&stFileTime, &stSytemTime);
stSytemTime.wYear -= 1600; // Remove the "start" diference

将 SYSTEMTIME 转换为 time_t

void ConvertSystemTimeToTimeT(const SYSTEMTIME &stSystemTime, time_t &stTimeT)
{
// time_t min value is 1 January 1970
LARGE_INTEGER liJanuary1970 = {0};
liJanuary1970.QuadPart = 116444736000000000;

FILETIME stFileTime = {0};
SystemTimeToFileTime(&stSystemTime, &stFileTime);

ULARGE_INTEGER ullConverter;
ullConverter.LowPart = stFileTime.dwLowDateTime;
ullConverter.HighPart = stFileTime.dwHighDateTime;

// time_t resolution is 1 second, FILETIME is 100 nanoseconds, so convert to seconds and remove the 1970 value
stTimeT = (time_t)(ullConverter.QuadPart - liJanuary1970.QuadPart) / 10000000;
}

关于c++ - 从变量类型 System.DateTime 读取 C++ 中的日期/时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12950659/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com