MFC获取时间

MFC时间获取与高精度计算 【代码】MFC时间获取与高精度计算。 阅读详情

MFC获取当前时间

windows相关 2009-10-05 23:22:16 阅读222 评论0 字号:大中小
一、使用MFC可以用以下代码得到

CTime time = CTime::GetCurrentTime();   ///构造CTime对象
int m_nYear = time.GetYear();      ///年
int m_nMonth = time.GetMonth();      ///月
int m_nDay = time.GetDay();      ///日
int m_nHour = time.GetHour();      ///小时
int m_nMinute = time.GetMinute();   ///分钟
int m_nSecond = time.GetSecond();   ///秒

我们还可以用CTime::Format函数将CTime对象转换为字符串对象
例如:
CString m_strTime = time.Format("%Y-%m-%d %H:%M:%S");

运行结果:m_strTime为 2001-8-1 12:11:05

二、使用GetSystemTime()这个API函数得到系统时间

SYSTEMTIME ti;
GetSystemTime(&ti);
////我们可以通过读取SYSTEMTIME结构体成员直接得到时间
typedef struct _SYSTEMTIME {
    WORD wYear;
    WORD wMonth;
    WORD wDayOfWeek;
    WORD wDay;
    WORD wHour;
    WORD wMinute;
    WORD wSecond;
    WORD wMilliseconds;
} SYSTEMTIME, *PSYSTEMTIME;

例如:ti.wMilliseconds;可以得到毫秒时间

 

以下是转载的:CTime以及其它时间差

一、DateTimePicker控件

引用一个DateTimePicker控件,关联变量m_date为DateTimeCtrl类型,然后在响应事件中加入如下代码:

   CTime tm;
   m_date.GetTime(tm);
   CString strDate=tm.Format("%Y-%m-%d");

就可以获取了...但是不知为何这个还和Vc的版本问题有关,开始时候我用的版本总是出错,或者srtDate为空,或者不是用户选择的日期,后来换了一个VC版本就能得到正确的数据了...

另外如果关联一个CTime类型的变量也能解决上面的问题,但是初始化的日期是1970-01-01而上面方法中初始化的日期是当前日期...所以根据用户需要的设定可以选择任何一种方法进行解决...

二、CTimeSpan获取时间差

要获取两个时间差,如两个CTime的时间差,可以使用MFC中的CTimeSpan类。

CTime time1 = CTime::GetCurrentTime(); ...其它代码... CTime time2 = CTime::GetCurrentTime(); // 两个CTime相减得到CTimeSpan CTimeSpan timeSpan = time2 - time1; // 得到总的秒数 int nTSeconds = timeSpan.GetTotalSeconds();

     注意GetTotalSeconds与GetSeconds的区别:GetTotalSeconds返回总的秒数,GetSeconds返回总是小于60,如:如果时间经过了100秒, GetTotalSeconds返回100,而GetSeconds返回40,因为有60秒转为一分钟了,同时使用GetMinutes会返回1,即1分40秒。

其它类似函数:

GetDays(); // 返回日数 GetHours(); // 返回小时数(-23至23之间) GetTotalHours(); // 返回总的小时数 GetMinutes(); // 返回分钟数(-59至59之间) GetTotalMinutes(); // 返回总的分钟数 GetSeconds(); // 返回秒数(-59至59之间) GetTotalSeconds(); // 返回总的秒数 三、CTime总结

1.初始化
     m_begintime=CTime(2004,1,1,0,0,0,-1);//参数依次为year,month,day,hour,minite,second
     m_endtime =CTime::GetCurrentTime();//当前时间
2.日期比较
CTimeSpan span;
span=time1-time2;
得到两时间的间隔.
可以取得span.GetHours().等
3.access数据库查询
使用DateDiff()函数,具体参照access帮助
CString timesql;
timesql.Format(" Where DateDiff('d',%s,'%s')<=0","日期",m_begintime.Format("%Y-%m-%d"));

4读取日期字段(odbc)
    CDBVariant var;
      recset.GetFieldValue(i,var);
     s.Format("%d-%d-%d",(var.m_pdate)->year,(var.m_pdate)->month,
      (var.m_pdate)->day);
5.CTime转换为CString
例:
   m_begintime.Format("%Y-%m-%d");//2004-10-03

6.CString转换为CTime
    //s="2004-10-5"
   int first=s.Find('-');
    int second=s.Find('-',first+1);
    int year=atoi(s.Left(4));
    int month=atoi(s.Mid(first+1,second-first+1));
    int day=atoi(s.Mid(second+1,s.GetLength()-second-1));
    CTime temp(year,month,day,0,0,0);
7.判断CString是否表示的正确日期格式
//判断是否为2004-01-13 ch 可代表其他分隔符
bool IsDate(CString str,char ch)
{
if(str.IsEmpty()) return false;
//日期分段
int first=str.Find(ch);
int second=str.Find(ch,first+1);
int year=atoi(str.Left(4));
int month=atoi(str.Mid(first+1,second-first+1));
int day=atoi(str.Mid(second+1,str.GetLength()-second-1));
    //判断
if (year < 2000 || year >= 2010)
{
   return false;
}
else if (month< 1 || month >12)
{
   return false;
}
else if (day< 1 || day > 31)
{
   return false;
}
else if (month == 4 || month == 6 || month == 9 || month == 11)
{
   if(day > 30)
   {
    return false;
   }
   else
   {
    return true;
   }
}
else if (month == '2')
{
   if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
   {
    if (day>29)
    {
     return false;
    }
    else
    {
     return true;
    }
   }
   else if (day>28)
   {
    return false;
   }
   return true;
}
else
{
   return true;
}
   
}
四、
在MFC中操作时间的类主要有两对:CTime和CTimeSpan与COleDateTime和COleDateTimeSpan,CTime和CTimeSpan主要封装了ANSI time_t和关于time_t的Run-Time库的主要函数,CTime里面使用的成员变量是time_t类型,该类型是个long型,由于long类型的原因,所以该类只能处理4294967296秒约68年的数据,所以用CTime只能处理1970年到2038年的日期。
    幸好,MFC同时提供了COleDateTime和COleDateTimeSpan类,使用该两个类完全可以代替CTime和CTimeSpan,COleDateTime和COleDateTimeSpan类所使用的成员变量是DATE类型,该类型是个double类型,而且使用的单位是日,所以可以处理从100年1月1日到9999年12月31日的日期时间,COleDateTime类的日期计算主要是操作公有成员变量COleDateTime::m_dt,该变量是DATE即double类型,该变量是为零时是1899年12月30日0时0分0秒,大于零时的日期比1899年12月30日0时0分0秒大,反之亦然,例如:
COleDateTime t;
t.m_dt=0;
AfxMessageBox(t.Format("%Y-%m-%d %H:%M:%S"));
运行的结果是:1899-12-30 00:00:00
COleDateTime t;
t.m_dt=39444.437731;
AfxMessageBox(t.Format("%Y-%m-%d %H:%M:%S"));
运行的结果是:2007-10-28 10:30:20
反过来以可以得到变量的值,例如:
COleDateTime t(2004,12,28,22,22,22);
CString str;
str.Format("%f",t.m_dt);
AfxMessageBox(str);
运行的结果是:38349.932199
COleDateTimeSpan类是用于对COleDateTime类的两个时间的时间间隔的计算,COleDateTimeSpan类使用的成员变量COleDateTimeSpan::m_span是一个double类型是用于记录两个COleDateTime::m_dt的时间差,例如:
COleDateTime t1(2006,1,1,0,0,0);
COleDateTime t2(2007,1,1,0,0,0);
COleDateTimeSpan ts=t2-t1;
CString str;
str.Format("%f",ts.m_span);
AfxMessageBox(str);
运行的结果是:365.000000
反过来也可以得到日期
COleDateTime t1(2006,1,1,0,0,0);
COleDateTimeSpan ts;
ts.m_span=400.0;
COleDateTime t2=t1+ts;
AfxMessageBox(t2.Format("%c"));
运行的结果是:02/05/07 00:00:00
可是在使用COleDateTimeSpan类中以下的几个函数可要小心,这不知道是不是MFC的一个Bug,
double GetTotalDays( ) const;
double GetTotalHours( ) const;
double GetTotalMinutes( ) const;
double GetTotalSeconds( ) const;
几个函数的返回值都是double类型
但是,如double GetTotalSeconds( ) const;在MFC内部的原形是:
_AFXDISP_INLINE double COleDateTimeSpan::GetTotalSeconds() const
{ ASSERT(GetStatus() == valid);
   long lReturns = (long)(m_span * 24 * 60 * 60 + AFX_OLE_DATETIME_HALFSECOND);
   return lReturns;
}
看到没有,它返回的实际是个long类型,并不是一个double类型,所以在使用这几个函数的时候计算两个时间的间隔不要太大,特别是GetTotalSeconds( )函数,如计算两个时间的间隔大于68年时就会溢出,所以我建议直接读取COleDateTimeSpan::m_span变量的值,这是一个单位为日的时间间隔,例如:
COleDateTime t1(2000,1,1,0,0,0);
COleDateTime t2(2070,1,1,0,0,0);
COleDateTimeSpan ts=t2-t1;
CString str;
str.Format("%f",ts.GetTotalSeconds());
AfxMessageBox(str);
运行的结果是:-2085892096.000000
这个结果明显是一个溢出,如果使用
str.Format("%f",ts.m_span*86400);
则会得到2209075200.000000。
所以灵活使用COleDateTime类的m_dt变量和COleDateTimeSpan类的m_span变量操作会得到意想不到的收获
MFC中系统时间获取 编译环境:VS2010 CString str; //获取系统时间   CTime tm; tm=CTime::GetCurrentTime();    str=tm.Format("现在时间是%Y年%m月%d日 %X"); MessageBox(str,NULL,MB_OK);  SYSTEMTIME st;   CString strDate,strTime; 阅读详情

相关推荐

MFC 获取系统时间 和设置时间

1 获取时间格式 2013-03-04   07:08 CString strDate,strTime; CTime tm = CTime::GetCurrentTime(); strDate = tm.Format(L"%Y-%m-%d"); strTime = tm.Format(L"%H:%m"); 2 获取时间格式 2013-3-4  7:8 SYSTEMTIME

yh_1108的专栏 5272

MFC中获取时间戳的方法,精确到秒、毫秒、微秒

在MFC中,你可以使用C++标准库中的chrono库来获取时间戳,并精确到秒、毫秒和微秒。chrono库提供了高精度的时间测量和操作功能。如果你使用的是较旧的编译器或标准,可能需要使用不同的方法来获取高精度时间戳。请注意,以上代码使用了C++11标准中的。函数用于获取当前系统时间,函数用于获取当前毫秒数,函数用于获取当前微秒数。函数用于获取时间戳,

学无止尽,谨言慎行! 4469

MFC中获取时间并显示到Edit Control中

首先,来一段代码 void C_MFCDlg::OnBnClickedOk() { // TODO: 在此添加控件通知处理程序代码 //获取系统时间并显示 while (1) {                 //使用CTime类获取时间 CString str_time; CTime tm; tm = CTime::GetCurrentTime(); str_time =

C130大力神 2404

[MFC基础]:如何显示获取系统时间

MFC如何显示获取系统时间

ToneChip的专栏,一个传统的嵌入式码农,裸机编程 1612

【46】MFC入门到精通——MFC显示实时时间,获取系统当前时间GetCurrentTime()、获取本地时间GetLocalTime()

本文介绍了MFC中获取和显示时间的几种方法。主要内容包括:1)使用GetCurrentTime()获取系统当前时间;2)使用GetLocalTime()获取本地时间(精确到毫秒);3)使用GetTickCount()获取程序运行时间。重点演示了实时显示时间的实现步骤:通过定时器1秒触发一次,调用时间获取函数更新显示。文中提供了完整的代码示例和效果截图,并附有参考链接。这些方法适用于需要在MFC应用程序中显示或记录时间的开发场景。

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 930

MFC 获取当前时间

C++

我不是码农的博客~~~ 778

MFC 获取系统时间

MFC 获取系统时间 GetCurrentTime   GetCurrentTime函数可以用来获取系统时间,用于VC编程。 使用方法   在VC中,我们可以借助CTime时间类,获取系统当前日期,具体使用方法如下:   CTime t = CTime::GetCurrentTime(); //获取系统日期   int d=t.GetDay(); //获得几号   int y=t.GetYear(...

qq_36600940的博客 1752

GD32F470实战:如何用EXMC+SDRAM为LVGL打造超大内存池(附完整配置代码)

本文详细介绍了如何利用GD32F470的EXMC接口与SDRAM深度整合,为LVGL构建高性能内存解决方案。通过硬件架构设计、EXMC接口配置、高级内存管理策略及LVGL性能优化技巧,开发者可以突破微控制器内存限制,实现高分辨率显示和复杂动画效果。附完整配置代码,助力嵌入式GUI开发。

rrr55的博客 548

MFC 使用datetimepicker获取时间

CTime time = CTime::GetCurrentTime();int year = time.GetYear(); //返回年int mouth = time.GetMouth(); //返回月份 int date = time.GetDays(); // 返回日数int hour = time.GetHours(); // 返回小时数(-23至23之间)int min = time.GetMinutes(); // 返回分钟数(-59至59之间)int sec = time.GetSecond

WangIcter的专栏 1万+

Dify+firecrawl:一个超好用的网页转Markdown API,打造你的第一个能检索爬虫RAG知识库的聊天机器人

Firecrawl是一个超简单的API服务——你扔给它一个URL,它就能把整个网站(包括子页面!)的内容自动抓下来,并且转换成干净、易读的Markdown格式。不用配置网站的站点地图,不用写爬虫规则,API调一下,数据直接到手。接下来我们一起本地部署吧!

2501_91673550的博客 2992

深入介绍 SAP OData CSRF Token 的一些技术细节

跨站请求伪造(Cross-Site Request Forgery,简称 CSRF)是一种网络攻击手段,它允许攻击者伪造用户的身份来执行未经授权的操作。为了防止 CSRF 攻击,常用的一种技术手段就是 CSRF Token.CSRF Token 是一种随机生成的防伪 Token,它由服务器颁发给客户端,并需要客户端在提交某些特定类型的请求时,将该 Token 添加到 HTTP 请求的头部字段去。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 643

MFC 获取系统当前时间

在MFC中获取系统当前时间,CString类型,显示效果2020/1/1 12:34:56。 CString getCurrentTime(void) { CTime timeNow = CTime::GetCurrentTime(); CString strTime; strTime = timeNow.Format("%Y/%m/%d %H:%M:%S"); return strTi...

weixin_43879311的博客 1918

Android 13 wificond讲解

Android 13 wificond讲解

专业开发者的博客,一个从事Android WiFi和蓝牙的工程师 2933

C++ MFC 获取时间

④ %#d, %#H, %#I, %#j, %#m, %#M, %#S, %#U, %#w, %#W, %#y, %#Y —— 如果开 头为0,去掉开头的0。④ 将当前时间格式化 CString date = time.Format("%Y-%m-%d %H:%M:%S %W-%A");① %#a, %#A, %#b, %#B, %#p, %#X, %#z, %#Z, %#% ——“#” 被忽略。%z,%Z —— 时区名称或缩写,如果时区未知,此字符为空,如“中国标准时间”

cq_Learnmore的博客 608

Buck电源设计常见的一些问题(四)MOS管振荡抑制方法(二)

另一方面,开关振铃为远超开关频率的高频振铃,并伴随很高的 dV/dt,会带来传导和辐射的 EMI 问题,可能会使得终端产品不能通过 EMI 标准测试,更严重时甚至会干扰开关电源自身的信号电路或临近的其他功能电路的正常工作。选用二极管反向特性好的器件;该电路可等效成图 3 中 LC 谐振电路,新的 LR和 CR为 Lp1、Lp5,Lp3, Lp4, CD等所有参与振铃的寄生感容的复合值。通常 Snubber 的 Csnub取值在数 nF 以上,在振铃频率 fR(加了 snubber 后)下的阻抗很小。

小幽余生不加糖 2892

【教程4>第1章>第11节】使用MATLAB快速产生批量verilog语句加快FPGA开发

...........如果手动写,那么就非常麻烦,这个时候,我们借助matlab,则可以快速生成上述类型的verilog程序,我们编写如下的MATLAB语句。\n");\n");end。

FPGA/MATLAB学习教程/源码/项目合作开发 1241

MFC获取日期时间

在MFC里面获取时间日期很简单: SYSTEMTIME time; GetSystemTime(&time); CString timestr; timestr.Format("%d%d%d%d%d%d",time.wYear,time.wMonth,time.wDay,time.wHour,time.wMinute,time.wSecond); 这样就获取到了系统的时间并把他

Jockr 2443

注册GitHub时出现Unable to verify your captcha response.Please visit https://docs.github.com/解决方案(持续更新)

本文主要介绍了注册GitHub时出现Unable to verify your captcha response. Please visit https://docs.github.com/articles/troubleshooting-connectivity-problems/#troubleshooting-the-captcha for troubleshooting information.解决方案,希望能对学习使用GitHub的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 8万+

MFC 获取系统时间及比较

Format函数的格式符号及其意义:如果当前时间大于指定的时间,函数返回false

滴水穿石的博客 2832

SAP Fiori 会话超时全解析:从 Launchpad 到 Identity Authentication 的统一策略

SAP Fiori会话超时机制解析与配置策略 本文深入探讨SAP Fiori项目中的会话超时机制,分析其对系统安全和用户体验的双重影响。文章系统拆解了SAP Fiori Launchpad与SAP Cloud Identity Services之间的会话超时工作原理,重点介绍了两种超时机制:服务器驱动的超时(通过SESSION_TIMEOUT_STOP_DATA_REFRESH参数控制)和UI驱动的超时(通过SESSION_TIMEOUT_INTERVAL_IN_MINUTES参数控制)。文中结合制造业产线

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 213

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

MFC下获取时间戳

MFC下获取时间戳 SYSTEMTIME tmSys; GetLocalTime(&tmSys); CTime tm3(tmSys); __int64 tmDst = __int64(tm3.GetTime())*1000 + tmSys.wMilliseconds; CString sMS; _i64toa(tmDst,sMS.GetBuffer(10

阿哲的专栏 7728

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

MFC获取当前时间

我们如果使用MFC的话可以用以下代码得到 CTime time = CTime::GetCurrentTime();///构造CTime对象 int m_nYear = time.GetYear();///年 int m_nMonth = time.GetMonth();///月 int m_nDay = time.GetDay();///日 int m_nHour = time.G

目前打算换一个工作,有招聘windows c++方向的也欢迎联系,北京、济南 最好 1893

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

MFC中CTime获取日期时间的方法

MFC中CTime类的功能非常强大,可以获取年、月、日、小时、分钟、秒、星期等等,最最重要的是可根据需要去格式化。

我的星空 2万+
上一篇: 注意C++ STL容器中erase的使用
下一篇: STL中map用法详解
Andyvccc
博客等级 码龄16年 4粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值