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
。如果_tcsftime
失敗,則只會得到NULL,但這不會因爲「空」時間。
因此,總之,使用類似於你建議的boost::optional
來表示空值。
默認ctor創建一個未初始化的CTime,因此您可以從中指定。 – 2013-03-06 15:23:38
@roger_rowland:我嘗試過'CTime tmp'和'CTime tmp = CTime()'。在這兩種情況下'Format'都返回'01.01.1970'(有效日期),而不是文檔中所說的空字符串。 – 2013-03-06 15:28:23
這是一種痛苦 - 我想下一個最好的做法是將一個CTime和一個bool包裝在一個結構中,然後使用它。使用bool標記非空CTime。任何人有其他想法? – 2013-03-06 15:44:17