CTime обнуляется?
В приложении MFC мне нравится отображать значения даты в SQL (CDBVariant
) в МФЦ CTime
, Поскольку записи в базе данных могут быть NULL (значение не существует), мне интересно, если CTime
обнуляемый Замечание в документации МФЦ к CTime::Format
заставляет меня задуматься, это должно быть возможно:
Если статус этого объекта CTime нулевой, возвращаемое значение - пустая строка.
- Но как установить этот статус, это вообще возможно?
- Если это невозможно, я думаю
boost::optional<CTime>
будет хорошей альтернативой?
1 ответ
CTime это просто оболочка для __time64_t
, Когда вы вызываете формат, он делает это:
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
в противном случае вы получите исключение, поэтому "нулевое" время не может быть передано _tcsftime
, Вы получите только NULL, если _tcsftime
терпит неудачу, но это не будет из-за 'нулевого' времени.
Итак, короче говоря, используйте что-то, как вы предлагаете boost::optional
представлять ноль.