将UNIX纪元时间转换为SYSTEMTIME
Convert UNIX epoch time to SYSTEMTIME
在我的c++ windows应用程序中,我正在将SYSTEMTIME转换为格式化字符串,如下所示:
SYSTEMTIME systemTime;
GetSystemTime(&systemTime);
char pSystemTime[50];
sprintf_s(pSystemTime, 50, "%04d%02d%02d%02d%02d%02d%03u ", systemTime.wYear, systemTime.wMonth,
systemTime.wDay, systemTime.wHour,
systemTime.wMinute, systemTime.wSecond,
systemTime.wMilliseconds);
现在我有了从UNIX纪元到现在的毫秒时间。
long time = 1442524186; //for example
我如何将这个长epoch时间转换为SYSTEMTIME,以便我也可以将其格式化为字符串?
static UINT64 FileTimeToMillis(const FILETIME &ft)
{
ULARGE_INTEGER uli;
uli.LowPart = ft.dwLowDateTime; // could use memcpy here!
uli.HighPart = ft.dwHighDateTime;
return static_cast<UINT64>(uli.QuadPart/10000);
}
static void MillisToSystemTime(UINT64 millis, SYSTEMTIME *st)
{
UINT64 multiplier = 10000;
UINT64 t = multiplier * millis;
ULARGE_INTEGER li;
li.QuadPart = t;
// NOTE, DON'T have to do this any longer because we're putting
// in the 64bit UINT directly
//li.LowPart = static_cast<DWORD>(t & 0xFFFFFFFF);
//li.HighPart = static_cast<DWORD>(t >> 32);
FILETIME ft;
ft.dwLowDateTime = li.LowPart;
ft.dwHighDateTime = li.HighPart;
::FileTimeToSystemTime(&ft, st);
}
来源:https://stackoverflow.com/a/11123106/2385309
编辑:也见:https://stackoverflow.com/a/26486180/2385309您可能需要为Epoch时间毫秒添加/减去11644473600000
在MillisToSystemTime
中应该这样行:
UINT64 t = multiplier * millis + 116444736000000000
相关文章:
- 防止主数据类型C++的隐式转换
- 模板参数替换失败,并且未完成隐式转换
- 努力将整数转换为链表。不知道我在这里做错了什么
- HEX值到wchar_t字符(UTF-8)的转换
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将 Qvector<uint8_t> 转换为 QString
- 如何在cuSparse中使用cusparseXcoo2csr从coo转换为csc
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 在c++中使用nlohmann从类到json的转换
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- 将 OLE 自动化日期 (OADate) 双精度转换为结构 tm,而不使用 VariantTime到SystemTime
- 将Windows SYSTEMTIME转换为字符串或字符buf,C++与用户的"Region and Language"格式?
- 将SystemTime转换为LPCWSTR
- 从SYSTEMTIME到time_t的转换以UTC/GMT表示时间
- 直接从 COLEDateTime 获取年份和月份还是先转换为 SYSTEMTIME 更快
- 正在将SYSTEMTIME(本机C++)转换为DateTime(C#)
- 将UNIX纪元时间转换为SYSTEMTIME