首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CTime可空吗?

CTime可空吗?
EN

Stack Overflow用户
提问于 2013-03-06 14:43:22
回答 1查看 311关注 0票数 1

在MFC应用程序中,我喜欢将SQL值(CDBVariant)映射到MFC CTime。因为数据库条目可以是NULL (值不存在),所以我想知道CTime是否为空。MFC文档中的备注 to CTime::Format让我思考,这应该是可能的:

如果此CTime对象的状态为空,则返回值为空字符串。

  • 但是如何设置这种状态,是否可能呢?
  • 如果这是不可能的,我想boost::optional<CTime>将是一个很好的选择?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-06 21:10:23

CTime只是__time64_t的包装器。当您调用格式时,它会这样做:

代码语言:javascript
复制
inline CString CTime::Format(_In_z_ LPCTSTR pFormat) const
{
    if(pFormat == NULL)
    {
        return pFormat;
    }

    TCHAR szBuffer[maxTimeBufferSize];
    struct tm ptmTemp;

    if (_localtime64_s(&ptmTemp, &m_time) != 0)
    {
        AtlThrow(E_INVALIDARG);
    }

    if (!_tcsftime(szBuffer, maxTimeBufferSize, pFormat, &ptmTemp))
    {
        szBuffer[0] = '\0';
    }
    return szBuffer;
}

因此,您想要查看的系统函数是_tcsftime。这就是我认为文档不太准确的地方。如果_localtime64_s失败,您将得到一个异常,因此“null”时间不能真正传递给_tcsftime。只有当_tcsftime失败时才会获得NULL,但这并不是因为“null”时间。

因此,简而言之,使用类似于您建议的boost::optional来表示null。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15250291

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档