• ベストアンサー

閏年自動判定

プログラム初心者です。 VbScript(ASP)で以下のプログラムを書く場合の書き方を教えてください。 閏年を自動的に判定し、以下の処理をしたいです。 前年同月の集計結果を表示したいです。 その判別は以下の通りです。 (1)もし当年が閏年で無く、前年が閏年の場合  2/28日に集計すると前年分は2/29(までの)のものを表示 (2)もし当年が閏年の場合、2/29に集計すると  前年分は2/28(までの)のものを集計 宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.2

>閏年の判定はその年(西暦)が4で割り切れるかどうかです(1601~2399年は) 1901~2099年の間違いですね。1900年、2100年等は閏年じゃ無いので。 あるいは、3/1の1日前が29日なら閏年なので、 if Day(DateAdd("d",-1,DateValue(年 & "/3/1"))=29 then 閏年 end if

ymoshimoshi
質問者

お礼

ありがとうございます。

その他の回答 (1)

  • jaham
  • ベストアンサー率21% (215/1015)
回答No.1

閏年の判定はその年(西暦)が4で割り切れるかどうかです(1601~2399年は) あとのロジックは自分で考えること(ここに初心者と熟練者で大きな違いが出ます)

関連するQ&A

  • C++でうるう年判定のプログラムを作りたいのですが

    C++でうるう年判定のプログラムが作りたいのですが・・・ #include <iostream> using namespace std; int main() { return 0; } 問題のこの下の部分の内容が書けません 変数をa % 4という計算と%100と%400をしなければいけないことはわかっています。この式の入れ方がわかりませんif文だとは思っているのですが 表示は「<<a<<"はうるう年です";」と「<<a<<"はうるう年ではありません";」という判定を表示したいです。

  • うるう年判定のアルゴリズム

    javaでうるう年判定のプログラムを作成しています。 プログラム自体はサーバにアップするときに実行結果が正しいかどうかテストされます。 仕様としては、 1.時間に関するAPIなどは一切使わずに完全に自作 2.入力される値はLong型の"秒"数(APIで提供されているのはミリ秒ですが) 3.60537895631062456(Long値) などの入力値に対して、年/月/日 (曜日) 時:分:秒 yday=元旦からの経過日数 を出力 最初は以下の関数を使用してループをかけていたのですが、仕様3の入力値に対して50秒近くかかってしまい、上手くいきませんでした。 public static int isLeap(int year){ if(year%4==0 && (year%100!=0 || year%400==0)) return 1; return 0; } 問題点はループ回数が多いことで、作る時点で分かってはいたのですが、ここまで遅くなるとは思っても見ませんでした。 これを使わない方法としては、一回だけうるう年(=n)を見つけ、その後は「(n+4)との比較+100で割り切れず400で割り切れる場合は別」という処理を行うことによって、処理時間を30秒付近にまで短縮することができたのですが、どうも10~15秒以内で終わらせなければテストにパスすることができないようです。 なんとか色々考えてはみたものの、上手いアルゴリズムは思いつきませんでした。 うるう年を処理するための"高速な"アルゴリズムはないのでしょうか。 お知恵を貸してください。よろしくお願いします。

  • うるう年判定のアルゴリズム

    javaでうるう年判定のプログラムを作成しています。 プログラム自体はサーバにアップするときに実行結果が正しいかどうかテストされます。 仕様としては、 1.時間に関するAPIなどは一切使わずに完全に自作 2.入力される値はLong型の"秒"数(APIで提供されているのはミリ秒ですが) 3.60537895631062456L などの入力値に対して、年/月/日 (曜日) 時:分:秒 yday=元旦からの経過日数 を出力 最初は以下の関数を使用してループをかけていたのですが、仕様3の入力値に対して50秒近くかかってしまい、上手くいきませんでした。 public static int isLeap(int year){ if(year%4==0 && (year%100!=0 || year%400==0)) return 1; return 0; } 問題点はループ回数が多いことで、作る時点で分かってはいたのですが、ここまで遅くなるとは思っても見ませんでした。 これを使わない方法としては、一回だけうるう年(=n)を見つけ、その後は「(n+4)との比較+100で割り切れず400で割り切れる場合は別」という処理を行うことによって、処理時間を30秒付近にまで短縮することができたのですが、どうも10~15秒以内で終わらせなければテストにパスすることができないようです。 なんとか色々考えてはみたものの、上手いアルゴリズムは思いつきませんでした。 うるう年を処理するための"高速な"アルゴリズムはないのでしょうか。 お知恵を貸してください。よろしくお願いします。

    • ベストアンサー
    • Java
  • 閏年の対前年比較のやり方

    日別の対前年比の帳票を作っています。今年は閏年なので2月29日まであります。 ですが、昨年は2月28日までしかないのでこの日の前年比は算出することができません。 このような場合、どのように処理するのが慣例なのでしょうか?

  • 前年比の計算式について

    閏年に関する質問です。 私は仕事でデータ集計(ここでは分かりやすく売上金とします)をしています。 通常、前年比を出す際は 今月の売上÷去年同月の売上×100で算出しています。 分かりやすい例で言うと、1000円÷3000円×100=33.3% つまりこの月の前年比は33.3%となります。 ここからが本題です。 去年(2016年2月)は閏年で、2月は29日までありました。しかし、今年は閏年ではないので2月は28日までしかありません。 そこで、通常通り前年比を算出すると前年差が大きくなってしまいます。 それで閏年修正をしたいと思っているのですが、計算式がどうにも思い付かず困っております。 また、年度累計も集計している関係上、4-2月の累計値も閏年修正をしたいと思っております。 大変ご迷惑をおかけしますが、お知恵を拝借させて頂けないでしょうか。 どうぞよろしくお願い致します。

  • 2004年の前のうるう年をjavaで表せが出来ませ

    大学の講義で出題せれたのですが、javaでそれぞれ1901年、2004年、2007年、2009年の前のうるう年を表示しろということで、うるう年の検索、判定のプログラムまでは組めたのですが、前の年ということで、うるう年である2004年で表示さなくてはいけないのが1996年なのですが、どうしても2004年と表示されてしまいます。 色々と調べてみたのですが分からず、初めての投稿をさせていただきました。 どう組めば良いか教えてください。下が組んだプログラムです。 public static int preleap(int n){ if((n%4 == 0) & (n%100 != 0) ||n%400 == 0){ return n; }else{ return preleap(n-1); } }

    • ベストアンサー
    • Java
  • 閏年のプログラム

    C言語(閏年)の質問です。 任意の範囲の年から閏年の表示とその数をカウントして次の実行結果のように表示するプログラムの作成で途中まではわかって修正・追加する箇所があったら一緒に教えてください。(ここでは2つの年をmain関数内で入力し、その範囲の西暦を引数とする関数checkYearを使用するものとする。int型の関数checkYearは、引数に西暦をとり、その西暦が閏年であれば、1を返し、閏年でない場合は0を返す。) なお、閏年の判定方法は以下のとおりである。 条件1 西暦年が4で割り切れる年は閏年である 条件2 条件1を満たしていても、西暦年が100で割り切れるときは閏年でない 条件3 条件2を満たしていても、西暦年が400で割り切れるならば閏年である 実行例1 西暦を入力:2000 西暦を入力:2009 2000年 2004年 2008年 閏年は3回あります。 実行例2 西暦を入力:2100 西暦を入力:2000 2000年 2004年 2008年 2012年 2016年 2020年 (省略) 2096年 閏年は25回あります。 実行例3 西暦を入力:2090 西暦を入力:2110 2092年 2096年 2104年 2108年 閏年は4回あります。 #include <iostream> bool checkYear(int year); int main() { int year; int year2; printf("西暦を入力:"); scanf("%d",year); printf("西暦を入力:"); scanf("%d",year2); int count = 0; for (int i = year; i < year2; i++) { if (checkYear(i)) { printf("%d年\n"); count++; } } printf("閏年は%d回です。\n"); return 0; } bool checkYear(int year) { return (((year % 4) == 0) && ((year % 100) != 0)) || ((year % 400) == 0); }

  • ASPで文字列に外字が含まれているか判定したい

    ASPで、画面で入力された文字列に外字が含まれているかどうか判定して、含まれる場合はエラーメッセージを表示したいのですが、外字の判定処理は可能でしょうか。 php版の外字の判定処理についてはYahoo知恵袋にありました。 http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1364613748 ASPで同様の処理を行うにはどのような処理になるのかご教授ください。

  • エクセル 小数点一桁目を判定

    お尋ねします。 エクセルで次の処理を行いたいのですがどなたか教えて下さい。 1)判定結果が小数点一桁目まで集計計算されます。   例えば、5.6とか3.5とかいった具合です。 2)この集計結果の小数点1桁目をみて、「5捨6入」で判定を行い、切り上げ・切り捨て処理をしたい。 小数点1桁目が「6以上」の場合は切り上げ、「5以下」の場合は切り捨てになります。 例えば、5.6の場合は0.6を切り上げて最終判定は6になり、3.5の場合は、0.5を切り捨てて3となります。 1.7だったら2、6.4であれば6になります。 マクロかVBAを使うことになるのでしょうか? どちらも素人ですのでわかりやすくご指導頂ければありがたいです。 お願い致します。

  • EXCEL関数の質問

            1月  2月  ~  11月  12月  累計     当年実績    10   20              30 前年度実績   40   20     50   70    60←1月、2月分のみ 前年同月対比  25%  100%             50% 上記は売上表です。当年実績を入力すると、前年実績と対比して割合を出します。 質問は前年度実績の累計が、当年実績を入力した月のみ累計計算する関数を教えてほしいのです。 IF関数でダラダラ書かないで、シンプルに解決する関数を教えてください。