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


HSPTV!掲示板


未解決 解決 停止 削除要請

2008
0228
Tommy日付の関数11解決


Tommy

リンク

2008/2/28(Thu) 12:20:37|NO.13795

日々,掲示板を利用しながら,勉強しており,感謝してます.

また初心者の質問ですが,ご助言ください.

日付の計算をさせて,日数や月数を計算させたいのですが,
いい関数は,どなたかご存知でしょうか?

例えばですが,
     A=2008/5/1
B=2009/10/1
     C=B−A です.(Cは,日数や月数を求めます.)

調べましたけど,現在時刻しか見当たらず.

以上,どなたかご助言よろしくお願いします.



この記事に返信する


begriff

リンク

2008/2/28(Thu) 15:12:37|NO.13797

なんかあたっているかどうかわからないけど

width 12+300+12,12+19+6+21+6+400+12 nen=1:gatu=1:hi=1 syscolor 15:boxf objsize 33,19 pos 12,12:input nen pos 12+33+6,12:input gatu pos 12+33+6+33+6,12:input hi pos 12,12+19+6:objsize 88,21:button "ok",*a m(0)=0,0,31,58,89,119,150,180,211,242,272,303,334 b="" pos 12,12+19+6+21+6:mesbox b,300,400 stop *a b="" repeat nen-1 c=cnt+1 uru=0:if c\4=0:uru=1:if c\100=0:uru=0:if c\400=0:uru=1 gokei+=365+uru b+="西暦 "+strf("%04d",c)+" 年の日数 "+(365+uru)+"" if uru=1 :b+=" * " b+="\n" await 0 loop gokei2=gokei:gokei=0 uru=0:if nen\4=0:uru=1:if nen\100=0:uru=0:if nen\400=0:uru=1 p=0:if uru=1:if gatu>2:p=uru gokei3=m(gatu)+p+hi b+="\n西暦 "+(nen-1)+" 年 12 月 31 日までの経過日数は "+gokei2+" 日\n" b+="西暦 "+nen+" 年 1 月 1 日からの経過日数は "+(gokei3-1)+" 日\n\n" b+="西暦 0001 年 1 月 1 日からの経過日数は "+(gokei2+gokei3-1)+" 日\n" objprm 4,b



begriff

リンク

2008/2/28(Thu) 15:23:46|NO.13799

モジュール化すると


#module #defcfunc gregorius int nen,int gatu,int hi m(0)=0,0,31,58,89,119,150,180,211,242,272,303,334 repeat nen-1 c=cnt+1 uru=0:if c\4=0:uru=1:if c\100=0:uru=0:if c\400=0:uru=1 gokei+=365+uru await 0 loop gokei2=gokei:gokei=0 uru=0:if nen\4=0:uru=1:if nen\100=0:uru=0:if nen\400=0:uru=1 p=0:if uru=1:if gatu>2:p=uru gokei3=m(gatu)+p+hi keka=gokei2+gokei3-1 return keka #global mes gregorius(2018,4,6)-gregorius(2008,2,28)

正しいかどうか検証してもらいたい。



begriff

リンク

2008/2/28(Thu) 15:34:57|NO.13800

西暦0001年1月1日は日曜らしいので
今日も求められるはず。

s(0)="土","日","月","火","水","木","金" mes s((gregorius(1,1,1)+1)\7) mes s((gregorius(2008,2,28)+1)\7)

間違ってる・・・?^^:



begriff

リンク

2008/2/28(Thu) 15:48:32|NO.13802

意外と単純じゃなかった(^^;
・平年は元旦と大晦日は同じ曜日
・西暦0004年は平年



Megane

リンク

2008/2/28(Thu) 15:54:47|NO.13803


m(0)=0,0,31,58,89,119,150,180,211,242,272,303,334

58が59で、そこから後が全て1少ないと思いますが、どうでしょう?



begriff

リンク

2008/2/28(Thu) 16:26:46|NO.13804

ご指摘ありがとうございます

修正版

#module #defcfunc gregorius int nen,int gatu,int hi m(0)=0,0,31,59,90,120,151,181,212,243,273,304,334 repeat nen-1 c=cnt+1 uru=0:if c\4=0:uru=1:if c\100=0:uru=0:if c\400=0:uru=1 if c=4:uru=0 gokei+=365+uru await 0 loop gokei2=gokei:gokei=0 uru=0:if nen\4=0:uru=1:if nen\100=0:uru=0:if nen\400=0:uru=1 if nen=4:uru=0 p=0:if uru=1:if gatu>2:p=uru gokei3=m(gatu)+p+hi keka=gokei2+gokei3-1 return keka #global s(0)="火","水","木","金","土","日","月" mes "2008 2 28 は"+s(gregorius(2008,2,28)\7)+"曜日" mes "2000 1 1 は"+s(gregorius(2000,1,1)\7)+"曜日" mes "2009 3 5 は"+s(gregorius(2009,3,5)\7)+"曜日" mes "2000 1 1 から 2011 7 31 までは"+abs(gregorius(2000,1,1)-gregorius(2011,7,31))+"日間" mes "グレゴリオ暦 の始まった 1582 10 15 から有効 ちなみに"+s(gregorius(1582,10,15)\7)+"曜日"



begriff

リンク

2008/2/28(Thu) 16:31:04|NO.13805

ユリウス暦が1582年10月4日までで次の日からグレゴリオ暦の1582年10月15日と言うことなので
複雑なのでそこらへんやってません・・・
まぁ十分でしょう。



Tommy

リンク

2008/2/29(Fri) 12:24:32|NO.13827

ども皆様ありがとうございました.
このルーチンで解決できました.



knock2

リンク

2008/2/29(Fri) 13:10:47|NO.13829

日数計算、ユリウス日で検索するとたくさんヒットします。
たしかhspstdlibにもsampleがあったと思います。

#module #defcfunc mjd int yy,int mm,int dd if mm<3 :mm_=mm+12: yy_=yy-1:else:mm_=mm:yy_=yy md= 0.0+int(365.25 *yy_) +int(yy_/400) -int(yy_/100) +int(30.59*(mm_-2))+dd -678912 return md #global screen 0,250,200 pos 60, mes "yyyy mm dd" objsize 30,20 pos 60,20 input yy1,,,4:in(0)=stat input yy2,,,4:in(1)=stat pos 100,20 input mm1,,,2:in(2)=stat input mm2,,,2:in(3)=stat pos 140,20 input dd1,,,2:in(4)=stat input dd2,,,2:in(5)=stat pos 60 objsize 110,20 input dummy,,,10:in(6)=stat button "計算(C=B-A)",*calc button "クリア",*clear pos 45,23 mes "A\nB\nC" *clear repeat 7 objprm in(cnt),"" loop stop *calc A=mjd(yy1,mm1,dd1) B=mjd(yy2,mm2,dd2) C=int(B-A) objprm in(6),C stop



knock2

リンク

2008/2/29(Fri) 13:15:59|NO.13830

遅かったか?・・・



begriff

リンク

2008/2/29(Fri) 20:27:19|NO.13833

私のプログラムではグレゴリオ暦をシュミレートしているため遅いです。
2000年なら(2000-1)回ループしますし、

knock2さんの提示しているスクリプトのほうが優れています(^^



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