C++中各种时间类型的转换(包括MFC中的时间类型)
平时写代码会经常遇到时间类型转换的问题,如时间戳转为格式化时间,或者反过来等,时间类型有的为time_t,还有FILETIME一堆,在这里记录下他们之间是如何转换的。
时间类型及其意义
FILETIME:结构持有的64位无符号的文件的日期和时间值。此值表示自UTC(Coordinated Universal Time)时间1601年1月1日开始的100纳秒为单位的时间。
SYSTEMTIME:这个和tm有点类似,代表系统时间。其中,SYSTEMTIME.year的值为多少就表示公元哪一年。
tm:Systemtime-1900得到tm.year,其他的还有些差别 tm.year的值加上1900才表示公元哪一年。
time_t:是日历时间;其值表示从UTC(Coordinated Universal Time)时间1970年1月1日00:00:00(称为UNIX系统的Epoch时间) 到当前时刻的秒数。
各种转换
- MFC时间控件转为CTime类型
- CTime类型转为时间戳(__int64)
- CTime转为SYSTEMTIME类型
- SYSTEMTIME类型转为FILETIME类型
- FILETIME转为时间戳(__int64)
- 时间戳转为FILETIME类型
MFC时间控件转为CTime类型
static CTime DataTimeCtrl2CTime(CDateTimeCtrl const& data,CDateTimeCtrl const& time)
{
CTime tData,tTime;
data.GetTime(tData);
time.GetTime(tTime);
return CTime(tData.GetYear(),tData.GetMonth(),tData.GetDay(),tTime.GetHour(),tTime.GetMinute(),tTime.GetSecond());
}
CTime类型转为时间戳(__int64)
static __int64 CTime2TimeStamp(CTime const& ctime)
{
return ctime.GetTime();
}
CTime转为SYSTEMTIME类型
static SYSTEMTIME CTime2Systemtime(CTime const& ctime)
{
SYSTEMTIME st;
ctime.GetAsSystemTime(st);
return st;
}
SYSTEMTIME类型转为FILETIME类型
static FILETIME SystemTime2FileTime(SYSTEMTIME const& sysTime)
{
FILETIME filetime;
::SystemTimeToFileTime(&sysTime,&filetime);
return filetime;
}
FILETIME转为时间戳(__int64)
第一种方法:
#define EPOCH_DIFF 116444736000000000
#define RATE_DIFF 10000000
#define TIME_DIFF 8*60*60
static TIME64_MS FileTime2TimeStamp(FILETIME const& filetime)
{
return ((static_cast<__int64>(filetime.dwHighDateTime)<<| filetime.dwLowDateTime)-EPOCH_DIFF)/RATE_DIFF - TIME_DIFF;
}
第二种方法:
static TIME64_MS FileTime2TimeStamp2(FILETIME const& filetime)
{
ULARGE_INTEGER ularge;
ularge.LowPart = filetime.dwLowDateTime;
ularge.HighPart = filetime.dwHighDateTime;
return (ularge.QuadPart - EPOCH_DIFF)/RATE_DIFF - TIME_DIFF;
}
时间戳转为FILETIME类型
#define EPOCH_DIFF 116444736000000000
#define RATE_DIFF 10000000
#define TIME_DIFF 8*60*60 //8小时时差 static FILETIME TimeStamp2FileTime(TIME64_MS const& ts)
{
TIME64_MS tmpTs = (ts+ TIME_DIFF) * RATE_DIFF + EPOCH_DIFF;
FILETIME ft;
ft.dwLowDateTime = (DWORD)tmpTs;
ft.dwHighDateTime = tmpTs >> ;
return ft;
}
小结
暂时用到这么多。
参考
https://blog.csdn.net/haiross/article/details/45718743
https://blog.csdn.net/leechiyang/article/details/39529041
https://blog.csdn.net/baggiowangyu/article/details/6267456
C++中各种时间类型的转换(包括MFC中的时间类型)的更多相关文章
- 实战c++中的string系列--std::string与MFC中CString的转换
搞过MFC的人都知道cstring,给我们提供了非常多便利的方法. CString 是一种非常实用的数据类型. 它们非常大程度上简化了MFC中的很多操作,使得MFC在做字符串操作的时候方便了非常多.无 ...
- java Date时间的各种转换方式和Mysql存时间类型字段的分析
一:各种Date之间的转换方法 public class TimeTest { public static void main(String[] args) { Date date = new Dat ...
- java中的基本数据类型的转换
本文参考了如下两篇文章: https://my.oschina.net/joymufeng/blog/139952 http://www.cnblogs.com/lwbqqyumidi/p/37001 ...
- C# 运算符和类型强制转换(6) 持续更新
C#支持的运算符 https://msdn.microsoft.com/zh-cn/library/6a71f45d(v=vs.140).aspx checked 和 unchecked ; b++; ...
- tp类型自动转换和自动完成
一.类型自动转换 在模型中对数据库字段自动完成 //模型中数据类型自动转换 添加一个$type数组即可protected $type=array( 'username'=>'serialize' ...
- javascript数据类型及类型的转换总结
javascript 是浏览器客户端脚本语言,要想让网页与后台程序更好的交互效果,这里我们详细了解javascript 数据类型及类型的转换 1,数据类型 number number类型 数字类型,浮 ...
- MFC中使用FLASH
一.准备工作 第一步:下载并安装Adobe Flash Player. 从官方网站(http://get.adobe.com/cn/flashplayer/)上下载最新的Flash Player(大约 ...
- MFC中使用FLASH相关
出自http://my.oschina.net/ypimgt/blog/62573 一.准备工作 第一步:下载并安装Adobe Flash Player. 从官方网站(http://get.adobe ...
- MFC中的一些视图
本章主要介绍MFC中主要的视图类,这些继承自Cview类. 继承关系如上图所示. 滚动视图 CscrollView给Cview添加了基本的滚动功能,它包含WM_VSCROLL和WM_HSCROLL消息 ...
随机推荐
- c# 文件过大时清空原有内容重新写入
FileStream fs = new FileStream("E:\\Test\\HistoryData.txt", FileMode.Append, FileAccess.Wr ...
- JavaScript各种继承方式(二):借用构造函数继承(constructor stealing)
一 原理 在子类的构造函数中,通过call ( ) 或 apply ( ) 的形式,调用父类的构造函数来实现继承. function Fruit(name){ this.name = name; th ...
- FortiGate软件版本升级
1.Web界面升级 1)注意:升级前,务必做好配置备份 2)要点 1.FortiGate防火墙的每款型号都有单独的版本文件,升级前务必确认下当前的设备型号: 2.升级包的后缀名必须为.out,前缀任意 ...
- Delphi: TGraphicControl支持PaintTo方法
Delphi之TWinControl支持PaintTo方法,可以方便的Paint有句柄控件,而此方法,TGraphicControl没有. 这使得有时需要Paint无句柄控件诸如TLabel时颇为费事 ...
- 浅析Java 数组-基础详解
什么是数组:数组对于每一门编程语言来说都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同. Java 数组:用来存储固定大小的同类型元素. 一 声明.创建,初始化Java 数组 写在前面 ...
- Python 安装pyautogui
在Python中使用PyAutoGui模拟键盘和鼠标操作 一.系统环境 操作系统:win10 64位 Python版本:Python 3.7.0 二.安装参考 1.使用pip进行安装,pip inst ...
- dup
dup是一个操作符,由编译器识别处理,和db.dw.dd等数据定义伪指令配合使用,用来进行数据的重复. 例如 db 3 dup (0) 定义了3个字节,它们的值都是0,相当于db 0,0,0 db ...
- DOS下的安全空间
我们需要直接向一段内存中写入内容: 这段内存空间不应存放系统或其他程序的数据或代码,否则写入操作很可能引发错误: DOS方式下,一般情况,0:200~0:2ff空间中没有系统或其他程序的数据或代码; ...
- 利用scp 远程上传下载文件/文件夹
scp [-1246BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file] [-l limit] [-o ssh_option] [-P port ...
- 线特征---LBD算法(三)
上一节主要是介绍LSD算法理论,这节主要是介绍LBD算法. 参考文章:An efficient and robust line segment matching approach based on L ...