1、在时区中设置自动夏令时
2、运行程序,使用CTime::GetCurrentTime()获取时间,(不要推出程序)
3、取消夏令时
4、再次使用CTime::GetCurrentTime()获取时间。发现它获取的时间和右下脚的时间是不一致的。注:
1、如果第1步不设置夏令时,在运行程序后再设置夏令时则没有这个问题。
2、使用CTime::GetLocalTm()则没有问题应该是CTime::GetCurrentTime()有问题,可惜没有源码。附相关说明:
本地时间=UTC(格林威治时间)+时区偏移量+夏令时偏移量多谢各为发表高见
2、运行程序,使用CTime::GetCurrentTime()获取时间,(不要推出程序)
3、取消夏令时
4、再次使用CTime::GetCurrentTime()获取时间。发现它获取的时间和右下脚的时间是不一致的。注:
1、如果第1步不设置夏令时,在运行程序后再设置夏令时则没有这个问题。
2、使用CTime::GetLocalTm()则没有问题应该是CTime::GetCurrentTime()有问题,可惜没有源码。附相关说明:
本地时间=UTC(格林威治时间)+时区偏移量+夏令时偏移量多谢各为发表高见
..\Program Files\Microsoft Visual Studio\VC98\MFC\SRCTIMECORE.CPP
!
CTime PASCAL CTime::GetCurrentTime()
// return the current system time
{
return CTime(::time(NULL));
}
------------------------------------------------
or
CTime curTime = CTime::GetCurrentTime();
------------------------------------------------
or
SYSTEMTIME sysTime;
GetLocalTime(&sysTime);
------------------------------------------------
or
Struct tm *Ptm;
unsigned long sTime;
Ptm = LocalTime(&sTime);
ATLTIME_INLINE CTime WINAPI CTime::GetCurrentTime() throw()
{
return( CTime( ::_time64( NULL ) ) );
}ATLTIME_INLINE CTime::CTime( __time64_t time ) throw():
m_time( time )
{
}__time64_t __cdecl _time64 (
__time64_t *timeptr
)
{
__time64_t tim;
FT nt_time; GetSystemTimeAsFileTime( &(nt_time.ft_struct) ); tim = (__time64_t)((nt_time.ft_scalar - EPOCH_BIAS) / 10000000i64);
if (timeptr)
*timeptr = tim; /* store time if requested */ return tim;
}关键是 GetSystemTimeAsFileTime