基于MFC的时间日期实例应用讲解

CSDN话题挑战赛第2期

日期和时间类简介

       CTime类的对象表示的时间是基于格林威治标准时间(GMT)的。CTimeSpan类的对象表示的是时间间隔。

       CTime类和CTimeSpan类一般不会被继承使用。两者对象的大小都是8个字节。所以会有戒指日期,这个戒指日期是多少请大家下去自己算一下,挺简单的,日期上限是3000年12月31日,下限是1970年1月1日 12:00:00 AM。

 CTime类的主要成员函数

CTime(const SYSTEMTIME& st,int nDST = - 1) ;

       以一个SYSTEMTIME结构体变量来构造CTime对象。SYSTEMTIME结构体也是我们对日期时间的常用表示方式。参数st为以本地时间表示的SYSTEMTIME对象,参数nDST同上。

static CTime WINAPI GetCurrentTime( );

       获取系统当前日期和时间。返回表示当前日期和时间的CTime对象。

int GetYear( ) const;

       获取CTime对象表示时间的年份。范围从1970年1月1日到2038年(包括2038年)1月18日。

 int GetMonth( ) const;

       获取CTime对象表示时间的月份。范围为1到12。

 int GetDay( ) const;

       获取CTime对象表示时间的日期。范围为1到31

  int GetHour( ) const;

       获取CTime对象表示时间的小时。范围为0到23。

 int GetMinute( ) const;

       获取CTime对象表示时间的分钟。范围为0到59。

 int GetSecond( ) const;

       获取CTime对象表示时间的秒。范围为0到59。

 int GetDayOfWeek( ) const;

       此函数的返回值表示CTime对象代表的是星期几,1表示是周日,2表示是周一,以此类推。

 CString Format(LPCTSTR pszFormat) const;

       将CTime对象中的时间信息格式化为字符串。参数pszFormat是格式化字符串,与printf中的格式化字符串类似,格式化字符串中带有%前缀的格式码将会被相应的CTime时间分量代替,而其他字符会原封不动的拷贝到返回字符串中。格式码及含义如下:

%a:周的英文缩写形式。
%A:周的英文全名形式。
%b: 月的英文缩写形式。
%B:月的英文全名形式。
%c: 完整的日期和时间。
%d:十进制形式的日期(01-31)。
%H:24小时制的小时(00-23)。
%I: 12小时制的小时(00-11)。
%j: 十进制表示的一年中的第几天(001-366)。
%m: 月的十进制表示(01-12)。
%M:十进制表示的分钟(00-59)。
%p: 12小时制的上下午标示(AM/PM)。
%S: 十进制表示的秒(00-59)。
%U: 一年中的第几个星期(00-51),星期日是一周的第一天。
%W: 一年中的第几个星期(00-51),星期一是一周的第一天。
%w: 十进制表示的星期几(0-6)。
%Y: 十进制表示的年

  CTime operator +(CTimeSpan timeSpan) const;

       将CTime对象和CTimeSpan对象相加,返回一个CTime对象。实际意义就是在一个时间的基础上推后一个时间间隔,得到一个新的时间

 CTime operator -(CTimeSpan timeSpan) const;

       将CTime对象和一个CTimeSpan相减,返回一个CTime对象。实际意义就是在一个时间的基础上提前一个时间间隔,得到一个新的时间。

  CTimeSpan operator -(CTime time) const;

       将该CTime对象和另一个CTime对象相减,返回一个CTimeSpan对象。实际意义就是计算两个时间点的间隔,得到一个CTimeSpan对象。

  CTime& operator +=(CTimeSpan span);

       为该CTime对象增加一个span表示的时间间隔

 CTime& operator -=(CTimeSpan span);

       为该CTime对象减去一个span表示的时间间隔。

CTime& operator =(__time64_t time);

       为该CTime对象赋予一个新的时间值。

       简单说下剩下的几个重载i运算符:

       operator == :    比较两个绝对时间是否相等。
       operator != :    比较两个绝对时间是否不相等。
       operator > :    比较两个绝对时间,是否前一个大于后一个。
       operator < :    比较两个绝对时间,是否前一个小于后一个。
       operator >=    : 比较两个绝对时间,是否前一个大于等于后一个。
       operator <=    : 比较两个绝对时间,是否前一个小于等于后一个。

       CTimeSpan类的主要成员函数

       前面介绍了CTime类的成员函数,再来看CTimeSpan类的成员函数就比较容易了,这里只做简单介绍。

       CTimeSpan( );

       构造一个未经初始化的CTimeSpan对象。

       CTimeSpan(__time64_t time);

       以一个__time64_t类型的数据来构造CTimeSpan对象,参数time的含义上面CTime(__time64_t time)的讲解。

CTimeSpan{
   LONG lDays,
   int nHours,
   int nMins,
   int nSecs
};

       以天、小时、分钟、秒等时间分量来构造CTimeSpan对象。每个时间分量的取值范围如下:
时间分量     取值范围
lDays     0-25000(大约)
nHours     0-23
nMins     0-59
nSecs     0-59

       GetDays():获得CTimeSpan类对象中包含的完整的天数。

       GetHours():获得当天的小时数,取值范围为-23到23。

       GetTotalHours():获得CTimeSpan类对象中包含的完整的小时数。

       GetMinutes():获得当前小时包含的分数,取值范围为-59到59。

       GetTotalMinutes():获得CTimeSpan类对象中包含的完整的分数。

       GetSeconds():获得当前分钟包含的秒数,取值范围为-59到59。

       GetTotalSeconds():获得CTimeSpan类对象中包含的完整的秒数。

       CString Format(LPCTSTR pszFormat) const;

       将一个CTimeSpan对象格式化为字符串。使用方式与CTime::Format类似,格式码及含义如下:

       %D:CTimeSpan对象中的总天数;
       %H:不足整天的小时数;
       %M:不足1小时的分钟数;
       %S:不足1分钟的秒数;
       %%:百分号。

看了这么多的原理可能没啥感觉,直接上菜走案例:

案列

1.先创建一个基于MFC的对话框的应用程序,打开视图资源,打开dialog,删除原有控件,添加静态文本框和编辑框

修改main函数
.h
C++代码

    #include "atltime.h"   
    #include <iostream>   
    using namespace std;

修改.cpp

 int _tmain(int argc, _TCHAR* argv[])   
    {   
        CString strTime;  // 用于将CTime对象格式化为字符串   
        // 获取当前时间并保存到curTime   
        CTime curTime = CTime::GetCurrentTime();   
      
        int nYear = curTime.GetYear();  // 获取当前年份   
        int nMonth = curTime.GetMonth(); // 获取当前月份   
        int nDay = curTime.GetDay();   // 获取当前日期   
        int nHour = curTime.GetHour();  // 获取当前小时时间   
        int nMin = curTime.GetMinute(); // 获取当前分钟时间   
        int nSec = curTime.GetSecond(); // 获取当前秒时间   
      
        // 输出当前时间   
        cout<<"当前时间:"<<endl;   
        cout<<nYear<<"年"<<nMonth<<"月"<<nDay<<"日"<<nHour<<"时"<<nMin<<"分"<<nSec<<"秒"<<endl;   
      
        // 为计算时间差,设定一个起始时间并输出   
        CTime startTime = CTime(2010,7,3,10,20,30);   
        cout<<"起始时间:"<<endl;   
        cout<<startTime.GetYear()<<"年"<<startTime.GetMonth()<<"月"<<startTime.GetDay()<<"日"<<startTime.GetHour()<<"时"<<startTime.GetMinute()<<"分"<<startTime.GetSecond()<<"秒"<<endl;   
      
        // 计算时间差   
        CTimeSpan timeSpan;   
        timeSpan = curTime - startTime;   
        cout<<"两时间相差:"<<endl;   
        cout<<timeSpan.GetDays()<<"天"<<timeSpan.GetHours()<<"小时"<<timeSpan.GetMinutes()<<"分"<<timeSpan.GetSeconds()<<"秒"<<endl;   
        cout<<"总小时数:"<<timeSpan.GetTotalHours()<<"小时"<<endl;   
        cout<<"总分钟数:"<<timeSpan.GetTotalMinutes()<<"分"<<endl;   
        cout<<"总秒数:"<<timeSpan.GetTotalSeconds()<<"秒"<<endl;      
      
        // 将当前时间curTime对象格式化为字符串   
        strTime = curTime.Format(_T("%Y-%m-%d %H:%M:%S"));   
        // 输出格式化字符串,由于字符串使用Unicode字符,所以要使用wcout输出   
        wcout<<(LPCTSTR)strTime<<endl;   
      
        return 0;   
    } 

运行程序就可以了,

由于工作的原因我也是才开始学,有真么错误欢迎大家指正,另外我也会不定期进行更新,将自己所掌握的东西分享给大家的,欢迎大家订阅收藏!!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值