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日午夜之后的时间。 据此,1899年12月31日凌晨0点可以表示为1.0 (是的,我想是的。 1900年1月1日上午6时显示2.25。 同样,1899年12月29日午夜显示-1.0。 1899年12月29日上午6点显示-1.25。 请注意,在分析“时间”(time )部分时,请使用上述数字)的小数部分的绝对值。 COleDateTime类可以处理的日期、时间范围为100年1月1日---9999年12月31日,基本上已经足够了吧? 哈哈。 请注意,COleDateTime无法处理夏时制时间。
COleDateTime也可以用于只表示日期或时间。 按照惯例,如果COleDateTime只包含时间值,则此时日期为日期0(1899年12月30日),可能会有点绕圈子。 同样,如果COleDateTime只表示日期,则该时间为0:00。
看看异常的情况吧。 这个班怎么处理? 如果创建表示第100天的COleDateTime对象,则COleDateTime对象接受该日期,但GetYear、GetMonth、GetDay、GetHour、GetMinute和get set 如果日期低于MFC 4.2版,则允许使用两位数的日期值,但不允许使用MFC 4.2版或更高版本。 为了避免上述问题,COleDateTime对象必须包含4位日期。 例如,coledatetimemytime (1996,1,1,0,0 ); //1996--数位
COleDateTime的基础数学运算(,- )的结果可以使用COleDateTimeSpan类表示。 减去两个COleDateTime等于一个COleDateTimeSpan值。 COleDateTimeSpan表示相对值(还记得前面提到的绝对时间值吗? 是时间间隔。 上述两个类之间的关系类似于CTime和CTimeSpan之间的关系。 大家请看。
打开代码,看看COleDateTime的使用方法。
查看运行结果:
10秒钟! 当然这个时间非常不准确,不能用于火星着陆的时机哦!
必须先用看起来很麻烦的GetDays、GetHours、GetMin .这样的函数获取日、时间、分分秒,然后再格式化字符串吗? 没有更进一步的方法吗? 当然不是! 向下看,COleDateTimeSpan包含一个格式方法,支持以下格式字符串:%a
Abbreviated weekday name
%A
完全weekday name
%b
Abbreviated month name
%B
完全month name
%c
dateandtimerepresentationappropriateforlocale
%d
dayofmonthasdecimalnumber (0131 )。
%H
hourin 24-hour format (0023 ) )。
%I
霍耳12 -霍耳格式(0112 ) )。
%j
dayofyearasdecimalnumber (001366 ) )
%m
monthasdecimalnumber (0112 ) )。
%M
minuteasdecimalnumber (0059 )。
%p
current locale’sa.m./p.m.indicator for 12-hour clock
%S
secondasdecimalnumber (0059 ) )。
%U
Week of year as decimal number,withsundayasfirstdayofweek (0053 ) )。
%w
weekdayasdecimalnumber (06; Sunday is 0 )
%W
Week of year as decimal number,withmondayasfirstdayofweek (0053 ) )。
%x
daterepresentationforcurrentlocale
%X
timerepresentationforcurrentlocale
%y
年权重中心,统计(0099 ) )。
%Y
Year with century,as decimal number
%z,%Z
Time-zone name or abbreviation; nocharactersiftimezoneisunknown
%%
百分比符号
哈哈,够了吧。