filetimeToUnixTime

windos filetime 起于 1601-01-01T00:00:00Z  ,  单位 100 纳秒

UnixTime         起于  1970-01-01T00:00:00Z  ,   单位  秒

它们的起始时间差了 11644473600 秒

下面这个函数把 filetime 转换成 UnixTime的秒偏差, 返回值 相当于 time(0),    ms 返回毫秒偏差

#define WINDOWS_TICK 10000000
#define SEC_TO_UNIX_EPOCH 11644473600LL
int64_t filetimeToUnixTime(int64_t windowsTicks, int* ms=NULL)
{if (ms) {*ms = (windowsTicks % WINDOWS_TICK) / (WINDOWS_TICK / 1000);}return (unsigned)(windowsTicks / WINDOWS_TICK - SEC_TO_UNIX_EPOCH);
}

再记录几个实用函数

1. 毫秒休眠

// msleep(200);   休眠 200ms
void msleep(int ms)
{
#ifdef WIN32Sleep(ms);
#elseusleep(ms*1000);
#endif
}

2.  获取修改文件时间

// 获取文件时间
// windows 是 创建时间(create time)    而 linux 是 改变时间 (change time)
// 调用的时候注意程序运行的 平台
bool filetime(const string& path, time_t* mtime, time_t* atime=NULL, time_t* createtime=NULL, time_t* changetime=NULL);
bool change_filetime(const string& path, time_t mtime, time_t atime);#ifdef WIN32
SYSTEMTIME TimeToSystemTime(time_t time)
{tm temptm = *localtime(&time);SYSTEMTIME st = { 1900 + temptm.tm_year, 1 + temptm.tm_mon,temptm.tm_wday, temptm.tm_mday, temptm.tm_hour,temptm.tm_min, temptm.tm_sec, 0 };return st;
}
#endifbool change_filetime(const string& path, time_t mtime, time_t atime)
{
#ifdef WIN32HANDLE f = CreateFileA(path.c_str(),      // LPCTSTR lpFileName,GENERIC_READ | GENERIC_WRITE,         // DWORD dwDesiredAccess,FILE_SHARE_READ | FILE_SHARE_DELETE,NULL,                               // LPSECURITY_ATTRIBUTES lpSecurityAttributes,OPEN_EXISTING,FILE_FLAG_BACKUP_SEMANTICS,         // DWORD dwFlagsAndAttributes,NULL);FILETIME fmtime, fatime;SYSTEMTIME local_mtime = TimeToSystemTime(mtime);SYSTEMTIME local_atime = TimeToSystemTime(atime);SYSTEMTIME sys_mtime, sys_atime;TzSpecificLocalTimeToSystemTime(NULL, &local_mtime, &sys_mtime);TzSpecificLocalTimeToSystemTime(NULL, &local_atime, &sys_atime);SystemTimeToFileTime(&sys_mtime, &fmtime);SystemTimeToFileTime(&sys_atime, &fatime);SetFileTime(f, NULL, &fatime, &fmtime);CloseHandle(f);
#elsestruct utimbuf buf;buf.modtime = mtime;buf.actime = atime;utime(path.c_str(), &buf);
#endifreturn true;
}bool filetime(const string& path, time_t* mtime, time_t* atime/*=NULL*/, time_t* createtime/*=NULL*/, time_t* changetime/*=NULL*/) {struct stat st;int ret = stat(path.c_str(), &st);if (-1 == ret)return false;if (mtime) *mtime = st.st_mtime;if (atime) *atime = st.st_atime;#ifdef WIN32if (createtime) *createtime = st.st_ctime;if (changetime) // windows 下没有这个时间    参数错误return false;
#elseif (changetime) *changetime = st.st_ctime;if (createtime) // linux 下没有这个时间   参数错误return false;
#endifreturn true;
}

3. 时间字符串的几个转换

// time_t 转换成时间字符串
string time2date(time_t tm, const char* fmt = "%Y-%m-%d");// yyyy-mm-dd hh:mm:ss --> time_t
// 假设你传入的时间一定是对的
time_t s2time(const string& s);// 返回 20190528
string current_date(const char* fmt = "%d%02d%02d");
// 返回 [09:18:24.234]
string current_time();string current_date(const char* fmt /*= "%d%02d%02d"*/)
{char date[40] = { 0 };#ifdef WIN32 //获得当前日期SYSTEMTIME st;GetLocalTime(&st);sprintf_s(date, sizeof date, fmt, st.wYear, st.wMonth, st.wDay);
#elsestruct timespec now;clock_gettime(CLOCK_REALTIME, &now);struct tm *x = localtime(&(now.tv_sec));snprintf(date, sizeof date, fmt, 1900 + x->tm_year, x->tm_mon + 1, x->tm_mday);
#endifreturn date;
}time_t s2time(const string& s) {struct tm t;int n = sscanf(s.c_str(), "%d-%d-%d %d:%d:%d",&t.tm_year, &t.tm_mon, &t.tm_mday,&t.tm_hour, &t.tm_min, &t.tm_sec);if (n != 6)return 0;t.tm_year -= 1900;t.tm_mon -= 1;return mktime(&t);
}string time2date(time_t tm, const char* fmt /*= "%Y-%m-%d"*/)
{char ch[64] = {0};strftime(ch, sizeof(ch) - 1, fmt, localtime(&tm));return ch;
}/* 这个函数好是好 就是不能精确到 毫秒
static string  getCurrentTimeStr()
{time_t t = time(NULL);char ch[64] = {0};strftime(ch, sizeof(ch) - 1, "%Y-%m-%d %H:%M:%S", localtime(&t));     //年-月-日 时-分-秒return ch;
}
*/string current_time()
{char now[30] = { 0 };#ifdef WIN32 //获得当前日期SYSTEMTIME st;GetLocalTime(&st);sprintf_s(now, 30, "[%02d:%02d:%02d.%03li]", st.wHour, st.wMinute, st.wSecond, st.wMilliseconds);
#elsestruct timespec ts;clock_gettime(CLOCK_REALTIME, &ts);struct tm *x = localtime(&(ts.tv_sec));snprintf(now, 30, "[%02d:%02d:%02d.%03li]", x->tm_hour, x->tm_min, x->tm_sec, ts.tv_nsec / (int)1E6);
#endifreturn now;
}

时间的几个实用函数 FILETIME UnixTime的转换相关推荐

  1. python的strftime函数_Python简单格式化时间的方法【strftime函数】

    本文实例讲述了Python简单格式化时间的方法,分享给大家供大家参考,具体如下: walker经常用到当前时间和相对时间,用来统计程序执行的效率,简单记一下,便于copy. >>> ...

  2. OpenCV学习笔记(三十六)——Kalman滤波做运动目标跟踪 OpenCV学习笔记(三十七)——实用函数、系统函数、宏core OpenCV学习笔记(三十八)——显示当前FPS OpenC

    OpenCV学习笔记(三十六)--Kalman滤波做运动目标跟踪 kalman滤波大家都很熟悉,其基本思想就是先不考虑输入信号和观测噪声的影响,得到状态变量和输出信号的估计值,再用输出信号的估计误差加 ...

  3. 从Vue.js源码中我学到的几个实用函数

    大家好,我是若川.欢迎加我微信 ruochuan12,长期交流学习.今天推荐Vuejs源码中几个实用的方法. 如果想看Vuejs源码,不知道如何下手,一般推荐配置Sourcemap,针对单个问题调试来 ...

  4. 精选22个Pandas实用函数

    公众号:尤而小屋 作者:Peter 编辑:Peter 大家好,我是Peter~ 今天小编又从26个字母中精选出22个Pandas常用的函数,将它们的使用方法简单介绍给大家,详细内容可以查看官网学习. ...

  5. php操作常用class集合,[PHP]经常用到的实用函数集合

    最新打算学习php,发现好多函数需要用到,可自己写又麻烦,于是找了下php的常用函数,从各大php系统中弄下来的,绝对是使用的php实用函数 function GetIP() { //获取IP if  ...

  6. MinkowskiEngine实用函数和类

    MinkowskiEngine实用函数和类 sparse_quantize MinkowskiEngine.utils.sparse_quantize(coords, feats=None, labe ...

  7. r语言提取列名_R语言基础(2)向量|矩阵|数组|数据框|数据IO|实用函数

    "pythonic生物人"的第85篇分享. 本文梳理R语言数据结构:向量.矩阵.数据框: 数据IO及实用函数. 本文速览

  8. php返回上一层的函数6,[PHP]实用函数6第1/2页

    [PHP]实用函数6第1/2页 2021-01-23 14:04:16114 //寄出电子邮件到指定的邮件地址to,subject表示主题,message为信件内容.额外的选项additional_h ...

  9. NumPy的实用函数整理之percentile

    NumPy的实用函数整理之percentile percentile() NumPy函数percentile()用于计算指定维度上数组元素的第 n 个百分位数,返回值为标量或者数组. percenti ...

最新文章

  1. 使用循环语句判定用户账号密码输入三次是否正确
  2. ceph13 快速编译 v13.2.4 --2019_8
  3. 性能测试报告模板_性能测试新手误区
  4. 51单片机mysql_51单片机的定时器
  5. Lucene学习笔记(1)
  6. 计算机专业小三门要求,最新小三门选科要求有啥变化?附对比表
  7. 第九章 图形用户界面的并行化(待续)
  8. (128)System Verilog下降沿检测实例
  9. CompletableFuture 详解
  10. mysql+同步大师,mysql同步异常 - 低调的糊涂虫的个人页面 - OSCHINA - 中文开源技术交流社区...
  11. 《设计模式详解》结构型模式 - 外观模式
  12. 差分硬盘的merge(合并差异)实验分析
  13. 思科路由器如何导出配置文件_探讨怎样备份思科路由器的配置文件呢?
  14. yasm linux gcc,yasm安装出现问题
  15. 12.分布式定时任务(xxl-job)
  16. word操作技巧总结--图片无法显示复制、空格、字体无法修改等
  17. 之江汇空间如何加音乐背景_添加QQ空间背景音乐添加图文教程
  18. 【Python 百炼成钢】进制转换、特殊回文数、水仙花数、杨辉三角、字母图形、01字符串、回形取数、排他方数、世纪末的星期日、约瑟夫环
  19. 用bridge创建虚拟网桥
  20. LeetCode 1823. 找出游戏的获胜者 (约瑟夫环)

热门文章

  1. 【应用安全架构】通过UMM学习身份和访问管理系统
  2. GAE上部署micolog
  3. Python - global类型与globals()方法
  4. ARP 插件骨骼绑定
  5. python bytes 改值_Python3 bytes() 函数详解 将参数转为不可变的字节数组
  6. 使用ReactNative构建移动应用程序中的AR应用程序:了解ReactNative中的AR开发生态系统
  7. 2023年专利申请流程及费用
  8. 大数据分析案例-基于随机森林算法探究影响人类寿命的因素
  9. Unity3D 阴影和深度纹理总结
  10. Unity.安卓微信支付与ShareSDK微信登陆合并