MFC的COleDateTime类使用

来源:互联网 发布:sqlserver date tochar 编辑:程序博客网 时间:2024/05/16 03:12
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

哈哈,够用了吧。
0 0
原创粉丝点击