VC++任意格式时间字符串转换为CTime类型以及计算时差
在MFC中使用CTime类获取到时间字符串比较方便、简洁。如果使用不规则时间字符串转换为CTime及相关的类型却不太常见,为此我根据需要动手封装了三个函数(函数一:不规则时间字符串转换为CTime类型,函数二:时间转换为相应字符串(比如1转换为"1天"),函数三:格式化输出时间差字符串)。
首先参考一个不规则时间字符串:
"2017-01!月-15日,12时,10分-03"
下面是函数定义部分:
//不规则字符串转换为Ctime类对象
CTime FormatTime(CString Strtime);//时间转换为字符串
//第一个参数 指定时间 比如time.GetDays()等
//第二个参数 时间标志 比如 天,小时等
CString GetValidData(int nVal,CString Str);//获取两个不规格字符串的时间差
//第一个参数 以前的时间(被减的时间)
//第二个参数 现在的时间 可以输入任意时间字符串(默认值为当前获取到的时间)
CString GetTimeLag(CString BeforeTime,CString CurrentTime = _T(""));
函数实现部分:
//不规则字符串转换为Ctime类对象
CTime FormatTime(CString Strtime)
{int nTime[6] = {0};char *StrData = new char[sizeof(char) * 256];memset(StrData,0,sizeof(StrData));memcpy(StrData,Strtime.GetBuffer(),Strtime.GetLength());Strtime.ReleaseBuffer();StrData[Strtime.GetLength()] = 0;int nNum = 0;char StrTemp[20] = {0};int nVal = 0;while (0 != *StrData || 0 != nVal){if ('0' <= *StrData && '9' >= *StrData){StrTemp[nVal++] = *StrData;++StrData;}else{if (0 != *StrTemp){nTime[nNum++] = atoi(StrTemp);}nVal = 0;memset(StrTemp,0,sizeof(StrTemp));++StrData;}}if (0 == nTime[0] && 0 == nTime[1] && 0 == nTime[2] && 0 == nTime[3] && 0 == nTime[4]&& 0 == nTime[5]){return NULL;}return CTime(nTime[0],nTime[1],nTime[2],nTime[3],nTime[4],nTime[5]);
}//时间转换为字符串
CString GetValidData(int nVal,CString Str)
{if (0 == nVal){return _T("");}CString StrTime;StrTime.Format(_T("%d%s"),nVal,Str);return StrTime;
}//获取两个不规格字符串的时间差
CString GetTimeLag(CString BeforeTime,CString CurrentTime)
{if (BeforeTime.IsEmpty()){return _T("");}CTimeSpan time;if (CurrentTime.IsEmpty()){time = CTime::GetCurrentTime() - FormatTime(BeforeTime);}else{time = FormatTime(CurrentTime) - FormatTime(BeforeTime);}CString StrVal;StrVal += (GetValidData(time.GetDays(),_T("天")) + GetValidData(time.GetHours(),_T("小时"))+ GetValidData(time.GetMinutes(),_T("分钟")) + GetValidData(time.GetSeconds(),_T("秒")));return StrVal;
}
下面展示一个测试用例:
CString Str = GetTimeLag(_T("2017-01!月-15日,12时,10分-03"),_T(""));
VC++任意格式时间字符串转换为CTime类型以及计算时差相关推荐
- Sqlserver 英文月份格式时间字符串转换为数字型日期
--需要装换的日期格式如下Updatetime Nov 1 2018 11:37AM--SQL语句 SET Language US_ENGLISH SELECT (CONVERT(DATETIME, ...
- c语言long的格式字符串,时间字符串和long类型之间的转换
2015-08-29 10:15:01 在进行时间存储时,经常会对时间字符串进行转型存储,一般都是存储为long类型,下面我先来说一下如何将时间字符串转换为long类型: 如果时间字符串只有年月日,可 ...
- Go 学习笔记(47)— Go 标准库之 strconv(string/int 互相转换、Parse 字符串转换为指定类型、Format 指定类型格式化为字符串)
参考: http://c.biancheng.net/view/5112.html 在实际开发中我们往往需要对一些常用的数据类型进行转换,如 string . int . int64 . float ...
- 使用PHP将任意格式的日期转换为Unix时间戳
在 PHP 中,可以使用 strtotime() 函数将任意格式的日期时间字符串转换为 Unix 时间戳.具体实现可以按照以下步骤: 获取任意格式的日期时间字符串,比如: $date_str = '2 ...
- LabVIEW中将日期时间字符串转换为时间戳数据说明与例程
LabVIEW中将日期时间字符串转换为时间戳数据说明与例程 在LabVIEW中,您可以将字符串数据转换为时间戳数据.如果您希望在测量文件中的数据旁边添加时间戳或轻松比较两个数据点之间的时间,则这可能会 ...
- c#将字符串转换为数组_pandas入门: 时间字符串转换为年月日
pandas中时间字符串转换为年月日方法总结. 创建一个dataframe df = pd.DataFrame(['2019-12-09', '2019-12-02'], columns=[" ...
- pandas将字符串转换成时间_pandas入门: 时间字符串转换为年月日
pandas中时间字符串转换为年月日方法总结.创建一个dataframe df = pd.DataFrame(['2019-12-09', '2019-12-02'], columns=[" ...
- pandas入门: 时间字符串转换为年月日
pandas中时间字符串转换为年月日方法总结. 创建一个dataframe df = pd.DataFrame(['2019-12-09', '2019-12-02'], columns=[" ...
- php 字符串转时间戳_php如何将时间字符串转换为时间戳
php将时间字符串转换为时间戳的方法:可以利用内置函数strtotime()来实现.strtotime()函数可以将任何英文文本的日期或时间描述解析为Unix时间戳,若成功则返回时间戳,否则返回fal ...
最新文章
- 分区表与分区索引(一):范围分区表的操作
- 计算机四级网络工程师考点速查,全国计算机等级考试标准教程:四级网络工程师...
- Python中字符串使用方法总结(学习笔记)
- android自定义minitype,MiniType部类以及扩展名
- 1.多彩的幕布CCLayerColor,CCLayerGradient
- 有奖问题征集|向大咖Scott 发问,好礼等你领!
- Linux 命令之 netstat -- 查看网络状态信息/显示网络状态
- [react] 请说说什么是useState?为什么要使用useState?
- 全球仅3000人通过的TensorFlow开发人员认证到底有多香!
- 【重难点】【JVM 02】反射在 JVM 层面的实现流程、Class.forName() 和 ClassLoader.loadClass 的区别
- svn-the working copy is locked due to a previous
- java 静态方法 变量_Java变量的初始化及静态方法的实现
- 【BERT】BERT中CLS效果真的好嘛?这篇文章告诉你答案
- 用Java打印棱形的思路,java打印菱形思路
- Linux系统编程——延时函数
- 在Swing中设置字体的大小
- listlength函数头文件_length函数
- 360浏览器打不开html5文件,电脑360浏览器打不开网页原因-浏览器打不开解决方法 - 系统家园...
- 国内Linux内核先驱者陈莉君教授领衔,业界首个产学研 eBPF技术探索SIG成立!
- c语言运行可以微信直接打开吗,如何用软件visual+c+++直接打开已将创建好的MFC工程文? 爱问知识人...