您的位置:首页 > 其它

v8 Date 时间和系统时间转换

2014-01-02 23:00 134 查看
google v8 Date 以double 类型储存从1970开始的毫秒数。

FILETIME 储存从1601年开始的 (100纳秒)数

void v8date_to_systemtime(v8::Handle<Value> dateVal,LPSYSTEMTIME st)
{
Local<Date> d = Date::Cast(*dateVal);
__int64 nTime = (__int64)d->NumberValue();
nTime *= 10000;// 先转换为100微秒单位的FILETIME
nTime += 116444736000000000;// FILETIME是1601年开始的,需要和1970年进行转换
::FileTimeToSystemTime((LPFILETIME)&nTime, st);
}
v8::Handle<Value> systemtime_to_v8date(LPSYSTEMTIME st)
{
__int64 nTime;
::SystemTimeToFileTime(st, (LPFILETIME)&nTime);
nTime -= 116444736000000000;
nTime /= 10000;
return v8::Date::New((double)nTime);
}


补充:

通过FILETIME来转换为本地时间

void v8date_to_localtime(v8::Handle<Value> dateVal,LPSYSTEMTIME localTime)
{
//     SYSTEMTIME st;
//     v8date_to_systemtime(dateVal,&st);
//     TIME_ZONE_INFORMATION zinfo;
//     GetTimeZoneInformation(&zinfo);
//     SystemTimeToTzSpecificLocalTime(&zinfo,&st, localTime);
Local<Date> d = Date::Cast(*dateVal);
__int64 nTime = (__int64)d->NumberValue();
nTime *= 10000;// 先转换为100微秒单位的FILETIME
nTime += 116444736000000000;// FILETIME是1601年开始的,需要和1970年进行转换
FILETIME ft;
FileTimeToLocalFileTime((LPFILETIME)&nTime,&ft);
::FileTimeToSystemTime(&ft, localTime);
}

v8::Handle<Value> localtime_to_v8date(LPSYSTEMTIME st)
{
__int64 nTime;
FILETIME ft;
::SystemTimeToFileTime(st,&ft);
LocalFileTimeToFileTime(&ft,(LPFILETIME)&nTime);
nTime -= 116444736000000000;
nTime /= 10000;
return v8::Date::New((double)nTime);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: