MFC的COleDateTime类使用

经常在软件开发中用到计算执行某个功能的耗时,有必要深入研究下COleDateTime类,以备不时之需。闲话少叙,书归正传,下面我们就一起来看看,该如何使用这个类。下面文字基本是翻译msdn内容,以求增强理解。
COleDateTime类是没有基类的,它封装了MFC的DATE数据类型,并提供了一系列的方法,来操作DATE结构体中的信息。DATE数据类型在OLE automation中会用到,且其为VARIANT结构体成员之一。各位看官有谁对OLE automation有深入理解的,在此可以留言,言明其为何物。那么COleDateTime到底能用来干嘛呢?见名知意,它能用来表示日期和时间,在具体点,它可以表示(存储)一个“绝对的日期和时间值”。绝对时间是相对于相对时间而言的,例如2012年4月13日15点29分是个绝对时间,从此刻逝去的“1小时3分50秒”,这就是相对时间,简单说相对时间是绝对时间做差得到的,呵呵,有点罗嗦了。
DATE数据类型,说白了,其实就是一个浮点值(在mfc中是double),用来度量(或者说表示吧)自1899年12月30日午夜12点以后的时间。据此:
1899年12月31日午夜12点就可以用1.0来表示(是不是过了午夜12点,就1.0+1.0呢?应该是的),以此类推
1900年1月1日上午6点就表示为2.25;同理,
1899年12月29日午夜12点标示为-1.0;
1899年12月29日上午6点标示为-1.25。
注意,如果要解析时间(time)部分就使用上述数字(如2.25)小数部分的绝对值。
COleDateTime类能够处理的日期、时间范围为:100年1月1日---9999年12月31日,基本也够用啦,是吧?哈哈。
注意,COleDateTime不能处理夏令时。
COleDateTime也可用于仅表示日期或者仅表示时间。按照惯例,如果COleDateTime仅含时间值,那么此时日期就为日期0(1899年12月30日),有点绕吧!同理,COleDateTime仅表示日期时,那么其时间就为0:00。
下面我们来看看异常的情况,该类是如何处理的。如果你创建了一个COleDateTime对象,表示的日期<100,那么该日期会被COleDateTime对象接受,但是接下来对GetYear, GetMonth, GetDay, GetHour, GetMinute,  GetSecond的调用会失败,返回-1(这么看来,还不如不接受呢!)。早于mfc4.2版本时,是可以使用2位数的日期值的,但是在mfc4.2版本后,这就不允许了!为了避免上述问题,我们应该为COleDateTime对象指定4位数的日期,例如:
COleDateTime mytime(1996,1,1,0,0,0); // 1996--四位数
COleDateTime的基础的算数运算(+,-)结果可以使用COleDateTimeSpan类表示(两个COleDateTime相减,等于一个COleDateTimeSpan值)。COleDateTimeSpan代表相对值(还记得前文说的绝对时间值吗?),是一个时间间隔。上述两个类的关系,类似于CTime与CTimeSpan的关系。大家可以参照。
下面上点代码,看看COleDateTime如何使用吧!
看看运行结果:
十秒钟!当然这个时间不是非常的精确,不能用于火星着陆计时哦!!!
非得先用看起来很麻烦的GetDays, GetHours, GetMin...这些函数获取天、小时、分秒,然后再格式化字符串吗?没有一步到位的方法吗?当然不是啦!往下看:
COleDateTimeSpan有个Format方法,支持如下格式化字符串:

%a

Abbreviated weekday name

%A

Full weekday name

%b

Abbreviated month name

%B

Full month name

%c

Date and time representation appropriate for locale

%d

Day of month as decimal number (01 – 31)

%H

Hour in 24-hour format (00 – 23)

%I

Hour in 12-hour format (01 – 12)

%j

Day of year as decimal number (001 – 366)

%m

Month as decimal number (01 – 12)

%M

Minute as decimal number (00 – 59)

%p

Current locale’s A.M./P.M. indicator for 12-hour clock

%S

Second as decimal number (00 – 59)

%U

Week of year as decimal number, with Sunday as first day of week (00 – 53)

%w

Weekday as decimal number (0 – 6; Sunday is 0)

%W

Week of year as decimal number, with Monday as first day of week (00 – 53)

%x

Date representation for current locale

%X

Time representation for current locale

%y

Year without century, as decimal number (00 – 99)

%Y

Year with century, as decimal number

%z, %Z

Time-zone name or abbreviation; no characters if time zone is unknown

%%

Percent sign

哈哈,够用了吧。

MFC的COleDateTime类使用相关推荐

  1. MFC的COleDateTime类在时间中的用法

    COleDateTime类是没有基类的,它封装了MFC的DATE数据类型,并提供了一系列的方法,来操作DATE结构体中的信息.DATE数据类型在OLE automation中会用到,且其为VARIAN ...

  2. MFC下的ColeDateTime类转化QT下的QDateTime类的实现方法,深入讲解QDQDateTime,Double的时间转化QDateTime

    简介: COleDateTime类型实现为一个浮点值,从1899年12月30日午夜起计算"日"数.所以1899年12月31日午夜用数1.0来表示.相似的,1900年1月1日下午6时 ...

  3. COleDateTime类 CTime类

    使用COleDateTime类 1) 获取当前时间.       CTime time;       time = CTime::GetCurrentTime(); 2) 获取时间元素.       ...

  4. 使用MFC里的类的方法

    在其它工程中,如Win32 Console Application,使用MFC里的类的方法: #define _AFXDLL #include <afx.h> 加上就可以使用了.有些类可能 ...

  5. VC++ 利用MFC的CWindowDC类实现画线功能 在桌面窗口中画线 绘制彩色线条 CPen nPenStyle nWidth crColor

    目录 利用MFC的CWindowDC类实现画线功能 在桌面窗口中画线 绘制彩色线条 CPen nPenStyle nWidth crColor 接上:VC++ 绘制线条 OnLButtonDown函数 ...

  6. VC++ 绘制线条 OnLButtonDown函数(DrawView.cpp) 利用SDK全局函数实现画线功能 利用MFC的CDC类实现画线功能 利用MFC的CClientDC类实现画线功能

    目录 绘制线条 OnLButtonDown函数(DrawView.cpp) 利用SDK全局函数实现画线功能 利用MFC的CDC类实现画线功能 利用MFC的CClientDC类实现画线功能 接上:VC+ ...

  7. 如何使用COleDateTime类获取昨天(前几天)的日期

    COleDateTime类中有个获取当前日期的函数:COleDateTime::GetCurrentTime(),但是有的时候需要获取昨天的日期,小编开始也不知道怎么获取,查找网上资料,发现对这个问题 ...

  8. 【无标题】c++ MFC图像处理CImage类常用操作代码

    原文作者:aircraft 原文地址:https://www.cnblogs.com/DOMLX/p/9598974.html 我看了一下发现关于c++下的CImage图像处理类 的图像处理相关的介绍 ...

  9. 【MFC】CCriticalSection类在Release编译下调用Lock函数会报0xC0000008错误

    [MFC]CCriticalSection类在Release编译下调用Lock函数会报错0xC0000008 问题描述 方法一 CRITICAL_SECTION代替CCriticalSection 方 ...

最新文章

  1. 关于BCH交易规范排序(CTOR)的优缺
  2. ajax hash调用实例
  3. Jquery中bind和live的区别
  4. 代码段间转移控制时的特权级检查(JMP/CALL)——《x86汇编语言:从实模式到保护模式》读书笔记28
  5. python质数列_现代化程序开发笔记(3)——多文件与模块
  6. Oracle的下载安装教程以及所出现的问题
  7. 深入理解Javascript之执行上下文(Execution Context)
  8. kotlin 查找id_Kotlin程序在矩阵中查找偶数和奇数的频率
  9. 服务器水厂物资管理系统,水处理管理系统及水处理管理服务器 Water management systems and water treatment management server...
  10. python基础文件读写(十五)
  11. CocosCreator发布web-desktop获取本地资源
  12. 实践:VB创建Com组件 在Asp以及.Net中调用
  13. cad计算机画图标准,CAD画图某些常用尺寸及作图习惯
  14. 如何不打开excel文件搜索其中内容---在线绿色工具
  15. 【图像去噪】基于matlab自适应布谷鸟算法优化维纳滤波器图像去噪【含Matlab源码 1892期】
  16. python找不到模块pyodbc_Python:找不到pyodbc导入模块
  17. 多图预警——从 RAID 到分布式系统中的副本分布
  18. moment时区处理心得
  19. xcode8 上传app到appStore 遇到 error ITMS90096
  20. amigo幸运字符什么意思_python3基础01数值和字符串(一)

热门文章

  1. libVLC 视频缩放
  2. 更高级的高级语言应该长什么样?
  3. 浅谈 Java 中的 Class 类
  4. Postgres SQL 远程连接数据库
  5. 猴子选大王php,php实现猴子选大王
  6. [转]北京好吃地点大全 2004年5月版
  7. 气相色谱仪常用的色谱定量方法
  8. 怎样安装西门子PLC
  9. java 坦克世界源代码教程_Unity开发《坦克世界》项目实战视频教程
  10. 几种主流数据库的压缩技术对比