COleDateTime 并比较日期部分

问题描述 投票:0回答:1

我有两个

COleDateTime
变量映射到对话框上的两个控件。

控件设置为短日期。

但是用户选择的日期仍然包含 MFC 内部的时间戳。

因此,当我测试变量是否相等时,它们失败了。

我知道我可以手动测试 3 个日期组件,但这会变得混乱。

给定 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())
visual-c++ mfc coledatetime
1个回答
0
投票

COleDateTime
在内部存储
DATE
值,可通过其
m_dt
公共成员访问。

A

DATE
数据类型是双精度浮点值,其中整数代表日期,小数部分代表一天中的时间。因此,去掉小数部分后,留下的值仅代表日期。将浮点值转换为整数值正是这样做的:

auto const meeting_date = static_cast<int>(datMeeting.m_dt);
auto const start_date = static_cast<int>(m_sSetup.datStart.m_dt);
auto const end_date = static_cast<int>(m_sSetup.datEnd.m_dt);

if (meeting_date >= start_date && meeting_date <= end_date) {
    // ...
}

当然,编写自由函数没有什么错,例如,

bool is_date_in_range(COleDateTime date, COleDateTime start, COleDateTime end)

隐藏了复杂性并传达了有关意图的明确信息。

© www.soinside.com 2019 - 2024. All rights reserved.