Windows FILETIME 与UNIX时间的转换

windows FILETIME时间从1601/01/01 零时零分零秒开始计时,windows每个时钟滴答将计数加一,每个时钟滴答的间隔是100 nanoseconds(纳秒,1秒=10的九次方纳秒),即每个时钟滴答= 10 (-7)秒。

unix、linux时间是从1970/01/01零时零分零秒开始计数,每秒计数加1. 197001/01与1601/01/01的时间间隔是11644473600秒。

所以从windows滴答时间转化为unix时间的代码为:

#define WINDOWS_TICK 10000000  //10的7次方
#define SEC_TO_UNIX_EPOCH 11644473600LL //1601与1970的时间间隔

unsigned WindowsTickToUnixSeconds(long long windowsTicks)
{
     return (unsigned)(windowsTicks / WINDOWS_TICK - SEC_TO_UNIX_EPOCH);
}

从timeval转化为FILETIME的代码为:

void FileTimeToTimeval(FILETIME *pFileTime, struct timeval *pTimeval)
{
    CalcOffsetFrom1601To1970(); //11644473600LL*10^7
    ULONGLONG ul64FileTime = 0;

    ul64FileTime |= pFileTime->dwHighDateTime;
    ul64FileTime <<= 32;
    ul64FileTime |= pFileTime->dwLowDateTime;

    ul64FileTime -= g_ullOffsetFrom1601To1970;
    pTimeval->tv_sec = (long)(ul64FileTime / 10000000);
    pTimeval->tv_usec = (long)((ul64FileTime % 10000000) / 10);
}

void TimevalToFileTime(struct timeval *pTimeval, FILETIME *pFileTime)
{
    CalcOffsetFrom1601To1970();
    ULONGLONG x = pTimeval->tv_sec * NSPERSEC + pTimeval->tv_usec * 10;
    x += g_ullOffsetFrom1601To1970;
    pFileTime->dwHighDateTime = (ULONG)(x >> 32);
    pFileTime->dwLowDateTime = (ULONG)x;
}
时间: 2024-10-29 19:11:08

Windows FILETIME 与UNIX时间的转换的相关文章

Java UNIX时间转换

public static String toLocalTime(String unix) { Long timestamp = Long.parseLong(unix) * 1000; String date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new java.util.Date(tmestamp)); return date; }http://www.huiyi8.com/jiaoben/ 网页特效代码 pub

mysql 时间函数转换

1 NOW() //当前时间 2 SYSDATE() //当前时间 3 CURRENT_TIMESTAMP 4 以'YYYY-MM-DD HH:MM:SS'或YYYYMMDDHHMMSS格式返回当前的日期和时间,取决于函数是在一个字符串还是在数字的上下文被使用. 5 mysql> select NOW(); 6 -> '1997-12-15 23:50:26' 7 mysql> select NOW() + 0; 8 -> 19971215235026 1 UNIX_TIMESTA

windows中查看开机时间

windows中查看开机时间 在windows下可以使用systeminfo命令来查看. 下面是网站摘录的关于windows启动了多长时间的内容 1. windows系统可以查看从开机到现在共运行了多长时间,这个功能比较实用,比如我们为了测试系统的稳定性或者由于其他原因,想要知道自己的Windows 操作系统到底运行了多长时间,不必借助专门的工具软件进行查看,操作系统本身就可以做到,下面来看看具体的方法吧: 在Windows 98中:单击“开始→程序→附件→系统工具→系统信息”命令,在“系统信息

【测试工具】一个将Unix时间转换为通用时间的工具

一个将Unix时间转换为通用时间的工具 演示效果: 点击转换之后变为: 源代码: function calctime2(){ var time = window.document.getElementById("inpTime").value; if ( time == "" ) { alert("时间为空,请重新输入"); return; } if ( isDigit(time) == false ) { alert("时间只能由数字

【MySQL笔记】字符串、时间日期转换

1.新增一列,将字符串日期(年.月.日)转换为Date类型 报错:Error Code: 1175. You are using safe update:http://jingyan.baidu.com/article/e5c39bf58ed69239d76033a4.html 2.unix时间戳和普通时间之间的转换: SELECT now();    #现在时间 SELECT unix_timestamp(now());    现在时间转换为unix时间戳 SELECT from_unixti

在不同编程语言中对Unix时间戳进行转换(Unix timestamp)

最近用到unix时间转换在mysql和.net中的应用.将此资料保存在博客中. 如何在不同编程语言中获取现在的Unix时间戳(Unix timestamp)? Java time JavaScript Math.round(new Date().getTime()/1000) getTime()返回数值的单位是毫秒 Microsoft .NET / C# epoch = (DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 1

php获取当前时间和转换格式

## 获取时间和转换格式```//1.time():返回当前时间的Unix时间戳$stimestamp = time();$date = date("Y-m-d h:i:sa",$stimestamp) //2.mktime():返回一个指定日期的Unix时间戳//语法:mktime(hour,minute,second,month,day,year,is_dst);$stimestamp = mktime(9,12,31,6,10,2016)$date = date("Y-

Sql日期时间格式转换

Sql日期时间格式转换 sql server2000中使用convert来取得datetime数据类型样式(全) 日期数据格式的处理,两个示例: CONVERT(varchar(16), 时间一, 20) 结果:2007-02-01 08:02/*时间一般为getdate()函数或数据表里的字段*/ CONVERT(varchar(10), 时间一, 23) 结果:2007-02-01 /*varchar(10)表示日期输出的格式,如果不够长会发生截取*/ 语句及查询结果:Select CONV

mysql获得60天前unix时间

开始分析该文件的主要的两个类型构造. typedef union __declspec(intrin_type) _CRT_ALIGN(16) __m128i { __int8 m128i_i8[16]; __int16 m128i_i16[8]; __int32 m128i_i32[4]; __int64 m128i_i64[2]; unsigned __int8 m128i_u8[16]; unsigned __int16 m128i_u16[8]; unsigned __int32 m12