1

CDBVariantMFC アプリケーションでは、SQL 日付値 ( ) を MFCにマップするのが好きCTimeです。データベースのエントリは NULL (値が存在しない) になる可能性があるため、CTimenull を許可するかどうかは疑問です。MFCドキュメントの発言は、私にCTime::Format考えさせます、それは可能であるはずです:

この CTime オブジェクトのステータスが null の場合、戻り値は空の​​文字列です。

  • しかし、このステータスを設定する方法は、それは可能ですか?
  • それが不可能な場合、私boost::optional<CTime>は良い代替案になると思いますか?
4

1 に答える 1

1

CTime は、__time64_t. format を呼び出すと、次のようになります。

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::optionalnull を表すためにあなたが提案するようなものを使用してください。

于 2013-03-06T21:10:23.390 に答える