CTime时间范围和取代方法

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值