この計算、閏年がなあ・・・。
まともに攻めてみる。方針は「繰り上がりのある足し算」・・・なのに下から計算できないジレンマ。
計算速度は酷そうですがやってみました。
nowtime = gettime(0),gettime(1)-1,gettime(3)-1,gettime(4),gettime(5),gettime(6)
passtime = 1,3,7,0,0,0 //1年3月7日5時間0分0秒後
repeat 6
time(cnt) = nowtime(cnt) + passtime(cnt)
loop
tmp_dl = 31,28,31,30,31,30,31,31,30,31,30,31
repeat
flag = 0
// 閏年はyearが4の倍数。しかし100の倍数の時は異なる。さらに、400の倍数の時は閏年。
if ( ( (time(0)\4)==0 )&&( (time(0)\400-1)\100!=99 ) ){
tmp_dl(1) = 29
}else{
tmp_dl(1) = 28
}
tmp_kl = 0,12,tmp_dl(limit(time(1),0,11)),24,60,60 //繰り上げ基準
//limitがないと月の繰り上げ計算過程でエラーになる。
repeat 5,1
if ( time(cnt) >= tmp_kl(cnt) ){
time(cnt)-=tmp_kl(cnt)
time(cnt-1)++
flag = 1
break
}
loop
if ( flag == 0 ) : break
loop
mes strf("%4d/%02d/%02d %02d:%02d:%02d",time(0),time(1)+1,time(2)+1,time(3),time(4),time(5))
開始地点が1である月と日は開始地点を0にして計算してみました。
・・・一応それっぽい値が返ってきているように見える・・・どうでしょう。