Vin*_*rta 2 c++ time systemtime
我想我的大脑只是抛出一个内存不足异常并且崩溃了,我的问题是我有一个SYSTEMTIME大小为3 的类成员数组,这是用户定义的(从.lua读取)
SYSTEMTIME m_MatchTime[3];
Run Code Online (Sandbox Code Playgroud)
然后从文件中以这种方式读取:
m_MatchTime[0].wDayOfWeek = static_cast<WORD>( m_Lua.GetGlobalNumber( "FirstDay" ) );
m_MatchTime[0].wHour = static_cast<WORD>( m_Lua.GetGlobalNumber( "FirstHour" ) );
m_MatchTime[0].wMinute = static_cast<WORD>( m_Lua.GetGlobalNumber( "FirstMinute" ) );
m_MatchTime[1].wDayOfWeek = static_cast<WORD>( m_Lua.GetGlobalNumber( "SecondDay" ) );
m_MatchTime[1].wHour = static_cast<WORD>( m_Lua.GetGlobalNumber( "SecondHour" ) );
m_MatchTime[1].wMinute = static_cast<WORD>( m_Lua.GetGlobalNumber( "SecondMinute" ) );
m_MatchTime[2].wDayOfWeek = static_cast<WORD>( m_Lua.GetGlobalNumber( "ThirdDay" ) );
m_MatchTime[2].wHour = static_cast<WORD>( m_Lua.GetGlobalNumber( "ThirdHour" ) );
m_MatchTime[2].wMinute = static_cast<WORD>( m_Lua.GetGlobalNumber( "ThirdMinute" ) );
Run Code Online (Sandbox Code Playgroud)
现在我有一个方法:
SYSTEMTIME cTime;
GetLocalTime( &cTime );
Run Code Online (Sandbox Code Playgroud)
我必须计算从三个用户定义的时间开始和接近当前时间,然后计算剩余时间,(请注意星期日= 0,星期六= 6,还要注意只有wDayOfWeek,wHour和wMinute必须是比较到最近)
编辑:现在我要获得500金额的解决方案,请注意我想要的例子,
今天:第4天,第3小时,第0分钟,
日期:第5
天,第5小时,30分钟到目前为止的剩余时间是:1天,2小时30分钟.
鉴于问题域,似乎没有必要(甚至可取)强制执行严格的时间排序,您只想找到一组时间中哪一个最接近给定的标记值.这将需要线性复杂性,但很容易实现.
我建议计算一个已知时期的时差,在这种情况下,周日00:00:00(秒),然后比较每个时间点与该点之间的差异,看看哪个是最接近的.
#include <Windows.h>
#include <algorithm>
#include <iostream>
long seconds_from_sunday_epoch(const SYSTEMTIME& t)
{
size_t seconds = t.wDayOfWeek * 86400;
seconds += t.wHour * 3600;
seconds += t.wMinute * 60;
return seconds;
}
size_t timediff_2(const SYSTEMTIME& t0, const SYSTEMTIME& t1)
{
size_t seconds_diff = std::abs(
seconds_from_sunday_epoch(t0) -
seconds_from_sunday_epoch(t1));
return seconds_diff;
}
int main()
{
SYSTEMTIME m_MatchTime[3];
// Monday: 00:00
m_MatchTime[0].wDayOfWeek = 1;
m_MatchTime[0].wHour = 0;
m_MatchTime[0].wMinute = 0;
// Sunday: 01:00
m_MatchTime[1].wDayOfWeek = 0;
m_MatchTime[1].wHour = 1;
m_MatchTime[1].wMinute = 0;
// Wednesday: 15:30
m_MatchTime[2].wDayOfWeek = 3;
m_MatchTime[2].wHour = 15;
m_MatchTime[2].wMinute = 30;
// Sunday 23:00
SYSTEMTIME cTime;
cTime.wDayOfWeek = 0;
cTime.wHour = 23;
cTime.wMinute = 0;
std::cout << timediff_2(cTime, m_MatchTime[0]) << "\n";
std::cout << timediff_2(cTime, m_MatchTime[1]) << "\n";
std::cout << timediff_2(cTime, m_MatchTime[2]) << "\n";
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1432 次 |
| 最近记录: |