HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2013
1122
EFGH現在の日時から指定時間後を出力したいです6解決


EFGH

リンク

2013/11/22(Fri) 00:08:00|NO.58366

現在の日時から指定時間後を出力したいです
例えば2013年12月31日 23:57:20が現在の日時だとして、5分後を計算したとき
2014年1月1日 0:2:20を自動で計算して出してほしいというものです


s =str(gettime(0))+"年" s+=strf("%02d",gettime(1))+"月" s+=strf("%02d",gettime(3))+"日 " s+=strf("%02d",gettime(4))+":" s+=strf("%02d",gettime(5))+":" s+=strf("%02d",gettime(6)) mes s+"からの5分後、10分後などを出力したいです" stop



この記事に返信する


掘木

リンク

2013/11/22(Fri) 01:08:29|NO.58368

この計算、閏年がなあ・・・。

まともに攻めてみる。方針は「繰り上がりのある足し算」・・・なのに下から計算できないジレンマ。
計算速度は酷そうですがやってみました。

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にして計算してみました。
・・・一応それっぽい値が返ってきているように見える・・・どうでしょう。



RUNE

リンク

2013/11/22(Fri) 08:18:38|NO.58372

Cのライブラリ使えば簡単かな。

#uselib "msvcrt.dll" #cfunc localtime "localtime" var #func time "time" var time t t+=300 //300秒後 dupptr tm,localtime(t),36 mes strf("%d/%d/%d %d:%d:%d",tm(5)+1900,tm(4)+1,tm(3),Tm(2),tm(1),tm(0))



掘木

リンク

2013/11/22(Fri) 17:37:43|NO.58373

>>RUNEさん

msvcrtにありましたかー・・・。
確かにそちらの方がわかりやすい上に楽ですねえ。もっとしっかり探すべきでしたか。
質問者ではありませんが参考にさせていただきます。ありがとうございます。

・・・C標準ランタイムの中身呼べたんですね;



EFGH

リンク

2013/11/22(Fri) 23:09:29|NO.58379

>>掘木様

大変長いソースありがたいです。
これは閏年なども全て正確に計算できてるんでしょうか?
頭が悪くて申し訳ありません><w

>>RUNE様

大変短いソースありがたいです。
こちらでは閏年などは確実に計算できてるんでしょうか?


また質問なんですが
【2013年12月31日 23:57:20】が現在の日時だとして、5分後を計算したとき
【2014年1月1日 0:2:20日】は【2013年12月31日 23:57:20】以降であるなどの判定付けをしたいんですが
どうすればこのような判定はできるでしょうか?



RUNE

リンク

2013/11/23(Sat) 08:47:47|NO.58390

>こちらでは閏年などは確実に計算できてるんでしょうか?
はい
>【2013年12月31日 23:57:20】が現在の日時だとして、5分後を計算したとき
>【2014年1月1日 0:2:20日】は【2013年12月31日 23:57:20】以降であるなどの判定付けをしたいんですが
>どうすればこのような判定はできるでしょうか?
5分後を計算したんなら判定するまでもなく後に決まってる。
指定した二つの時刻の差を判定するならこうかな。
mktimeやtm構造体については自分で検索してくれ。

#uselib "msvcrt.dll" #cfunc mktime "mktime" var dim tm1,9 //tm構造体 dim tm2,9 tm1=20,57,23,31,12-1,2013-1900 //2013/12/31/ 23:57:20 tm2=20,2,0,1,1-1,2014-1900 //2014/1/1 0:2:20 t1=mktime(tm1) //指定時刻をある時刻からの経過秒数に変換する t2=mktime(tm2) s1=strf("%d/%d/%d %d:%d:%d",tm1(5)+1900,tm1(4)+1,tm1(3),tm1(2),tm1(1),tm1(0)) s2=strf("%d/%d/%d %d:%d:%d",tm2(5)+1900,tm2(4)+1,tm2(3),tm2(2),tm2(1),tm2(0)) mes s2+" は "+s1+" より" if t2>t1{ mes ""+(t2-t1)+"秒進んでいます。" }else{ mes ""+(t1-t2)+"秒遅れています" }



EFGH

リンク

2013/11/23(Sat) 20:12:51|NO.58398

ありがとうございます^^

解決しました!!



ONION software Copyright 1997-2023(c) All rights reserved.