将UNIX历元时间转换为系统时间 < >我在C++窗口应用程序中,我把系统时间转换成一个格式化的字符串,比如: SYSTEMTIME systemTime; GetSystemTime(&systemTime); char pSystemTime[50]; sprintf_s(pSystemTime, 50, "%04d%02d%02d%02d%02d%02d%03u\0", systemTime.wYear, systemTime.wMonth, systemTime.wDay, systemTime.wHour, systemTime.wMinute, systemTime.wSecond, systemTime.wMilliseconds);
现在我有一个从UNIX时代开始的毫秒时间将UNIX历元时间转换为系统时间 < >我在C++窗口应用程序中,我把系统时间转换成一个格式化的字符串,比如: SYSTEMTIME systemTime; GetSystemTime(&systemTime); char pSystemTime[50]; sprintf_s(pSystemTime, 50, "%04d%02d%02d%02d%02d%02d%03u\0", systemTime.wYear, systemTime.wMonth, systemTime.wDay, systemTime.wHour, systemTime.wMinute, systemTime.wSecond, systemTime.wMilliseconds);,c++,C++,现在我有一个从UNIX时代开始的毫秒时间 long time = 1442524186; //for example 如何将较长的历元时间转换为系统时间,以便将其格式化为字符串?静态UINT64 FileTimeToMillis(const FILETIME&ft) static UINT64 FileTimeToMillis(const FILETIME &ft) { ULARGE_INTEGER uli; uli.LowPart = ft.dwLowDateTim
long time = 1442524186; //for example
如何将较长的历元时间转换为系统时间,以便将其格式化为字符串?静态UINT64 FileTimeToMillis(const FILETIME&ft)
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);
}
{
乌拉热乌利;
uli.LowPart=ft.dwLowDateTime;//可以在这里使用memcpy!
uli.HighPart=ft.dwHighDateTime;
返回静态投影(uli.QuadPart/10000);
}
静态无效毫秒至系统时间(UINT64毫秒,系统时间*st)
{
UINT64乘数=10000;
UINT64 t=乘数*毫秒;
乌拉尔热;
li.QuadPart=t;
//注意,不必再这样做了,因为我们正在
//直接在64位UINT中
//li.LowPart=静态_铸造(t&0xFFFFFFFF);
//li.HighPart=静态铸件(t>>32);
文件时间ft;
ft.dwLowDateTime=li.LowPart;
ft.dwHighDateTime=li.HighPart;
::FileTimeToSystemTime(&ft,st);
}
资料来源:
编辑:另请参见:
对于历元时间毫秒,您可能需要添加/减去116444473600000
{
乌拉热乌利;
uli.LowPart=ft.dwLowDateTime;//可以在这里使用memcpy!
uli.HighPart=ft.dwHighDateTime;
返回静态投影(uli.QuadPart/10000);
}
静态无效毫秒至系统时间(UINT64毫秒,系统时间*st)
{
UINT64乘数=10000;
UINT64 t=乘数*毫秒;
乌拉尔热;
li.QuadPart=t;
//注意,不必再这样做了,因为我们正在
//直接在64位UINT中
//li.LowPart=静态_铸造(t&0xFFFFFFFF);
//li.HighPart=静态铸件(t>>32);
文件时间ft;
ft.dwLowDateTime=li.LowPart;
ft.dwHighDateTime=li.HighPart;
::FileTimeToSystemTime(&ft,st);
}
资料来源:
编辑:另请参见:
您可能需要在
MillisToSystemTime
中为历元时间毫秒添加/减去116444473600000行:
UINT64 t = multiplier * millis + 116444736000000000
在
MillisToSystemTime
中,行应该是这样的:
UINT64 t = multiplier * millis + 116444736000000000
在我看来,这个建议在语义上是错误的。
SYSTEMTIME
类型的值仅由表示当前系统时间的GetSystemTime
生成。此类型不适用于一般用途。您是否研究过如何格式化UNIX时间戳本身?我当然会这么做。在我看来,这个建议在语义上是错误的。SYSTEMTIME
类型的值仅由表示当前系统时间的GetSystemTime
生成。此类型不适用于一般用途。您是否研究过如何格式化UNIX时间戳本身?当然,这就是我要做的。当我将时间(例如1442535162)传递给网站时,它给出的时间GMT:Fri,2015年9月18日00:12:42 GMT是正确的,但当我将其传递到MillisToSystemTime函数时,系统时间值是错误的,因为它表示wYear=1601,wMonth=1,wDayOfWEeek=3…你需要将该数字乘以1000毫秒,因此,尝试144252418600,但它已经乘以10000,那么将1442535162乘以1000如何得到1442524186000??当我将时间(例如1442535162)传递给网站时,它给出了一个时间GMT:Fri,2015年9月18日00:12:42 GMT这是正确的,但当我将其传递到MillisToSystemTime函数中时,SYSTEMTIME值不正确,因为它表示wYear=1601,wMonth=1,wDayOfWEeek=3…您需要将该数字乘以1000毫秒,因此尝试使用144252418600,但它已经被乘以10000,那么将1442535162乘以1000如何得到1442524186000??