将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历元时间转换为系统时间 < >我在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

现在我有一个从UNIX时代开始的毫秒时间

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??