CTime
COleDateTime
GetLocalTime
CTime的时间范围是
1970 , 1 , 1 , 8 , 0 , 0
2038 , 1 , 19 , 3 , 14 , 7
正常CTime所能表示的最早时间是(1970 , 1 , 1 , 0 , 0 , 0)
因为我们是东8区,比格林威治天文台早8个小时,所以我们的电脑的最早时间是(1970 , 1 , 1 , 8 , 0 , 0)
当使用CTime时,超出这个时间范围就出错
有人建议使用COleDateTime
但是在获取当前时间时,使用COleDateTime::GetCurrentTime
异常会出现异常,程序无法运行
查看GetCurrentTime的定义,会发现它实际上执行的是GetTickCount
在winbaser.h中,会发现
#define GetCurrentTime() GetTickCount()
GetTickCount返回的是DWORD类型的值
当超出时间范围时,返回的是负数,无法解析,所以异常,所以不能使用GetCurrentTime获取当前时间
最使用的函数是使用GetLocalTime()获取时间,格式为
SYSTEMTIME sysTime;
GetLocalTime(&sysTime);
COleDateTime curTime(sysTime);
但是,不管你怎么想办法避免使用CTime,一些MFC自己内部使用的CTime
一样导致程序崩溃
例如,使用了CFile的GetStatus
CFileStatus fileStatus;
CFile::GetStatus(xxx,fileStatus);
CFileStatus内部使用了CTime类型的成员变量,程序直接崩溃
@[TOC]windows