我有两个COleDateTime
变量映射到对话框上的两个控件。控件设置为短日期。但是,用户选择的日期仍然包含MFC 内部的时间戳。因此,当我测试变量是否相等时,它们失败了。
给定 2 个COleDateTime
对象,我们如何进行比较并忽略时间部分?例如,我想做这个测试:
(datMeeting >= m_sSetup.datStart && datWeek <= m_sSetup.datEnd)
但是开始/结束(映射到对话框)有时间组件,即使我不需要它们。我只是想比较日期。
目前我正在这样做:
(datMeeting.GetDay() >= m_sSetup.datStart.GetDay() &&
datMeeting.GetMonth() >= m_sSetup.datStart.GetMonth() &&
datMeeting.GetYear() >= m_sSetup.datStart.GetYear())
&&
(datMeeting.GetDay() <= m_sSetup.datEnd.GetDay() &&
datMeeting.GetMonth() <= m_sSetup.datEnd.GetMonth() &&
datMeeting.GetYear() <= m_sSetup.datEnd.GetYear())
COleDateTime
内部存储一个DATE
值,可通过其m_dt
公共成员访问。数据
DATE
类型是双精度浮点值,其中整数表示日期,小数部分表示一天中的时间。因此,去掉小数部分后,留下的值仅代表日期。将浮点值转换为整数值正是这样做的:当然,编写一个自由函数没有什么错,例如,
它隐藏了复杂性并传达了有关意图的明确信息。
请注意,您现在拥有的比较表达式有一个潜在的错误。它将于明年初开始显现。如果
datMeeting
的年份严格大于 的datStart
年份,则不得在比较中使用其月份和日期。如果是的话,某些日期会被错误地拒绝。上面提出的解决方案不受此缺陷的影响,因为它对具有严格总排序的整数值进行操作。