- 締切済み
一年の第何週目であるかを判断する方法
関数を使用せずに今日が1年の第何週目(始まりは1月1日で曜日はその年により不確定) であるかを判断するプログラミング方法について アドバイスお願いします。
- みんなの回答 (6)
- 専門家の回答
みんなの回答
- amakasu2013
- ベストアンサー率0% (0/0)
1月1日をゼロとする、目的の日までの通算日数を day_no 、 1月1日の曜日を w ( 0: 日曜、 1: 月曜、・・・ 6: 土曜)としたとき、 目的の日の(1月1日を含む週を第1週とする)週番号 week_no は、 week_no = int( ( day_no + w ) / 7 ) + 1; これで、求められそうです。 関数を使わないとのことですが、d、w、ともに正の整数ですから、 int() については、勘弁して貰えると思います。 あとは、年内通算日数や曜日をどうやって求めるかですが、 それぞれ、解明されていると思います。
- furyfox
- ベストアンサー率56% (58/103)
週の始まりを日曜とするなら 日曜を0 月曜を1 火曜を2・・・土曜を6と定義し 1月1日の曜日がy日数を7で割った余りをx日とすると y+x>7なら+1週するのです。 また0週目は存在しない事も注意して必ず+1週します。 1月1日を水曜(x = 4) 1月30日が第何週か求める場合 30÷7=4余り2 2+3は5(7以下) よって4 + 0 + 1の5週目 最後の+1は最初の第1週を数えるためです。 同じく2月23日の場合 (23+31)÷7=7余り5 5+3は8(>7) よって 7 + 1 + 1→9週目
- imogasi
- ベストアンサー率27% (4737/17069)
#1の補足に関連して、やはり使用言語の候補ぐらいは書くべきと思いました。 何故なら、「関数を使用せずに」と言う言葉を見たとき とっさにエクセルの既製関数を思い出しましたが、良く考えると、この本問題のロジックを勉強した後に、ある言語でコーディングして、私製関数に仕上げる(これも言語により表現法が異なりますね)ことが出来るわけですから、関数を使わないと言うのは、厳密には、ご質問者の意図を表していないと思いました。だから例えば表現するなら、例示的にエクセルのWEEKNUM関数(本問にピッタリ)のようなものを使わず、WEEKDAY関数も使わず、日数の加減乗除あたりでプログラムをコーディングしたいのでそのロジックを知りたいとでもなりましょうか。 また「年初来の第何週とは」実際のカレンダの月-日曜日を単位として、一月1日の属する週を第1週として、何番目の週にその日が属するかに世間常識的に決まったものでしょうか。月-日が1週間か、日-土が1週間かの議論は要らないのでしょうか。
- tintagel
- ベストアンサー率77% (214/277)
関数を使用しないならまず次の3つを求める必要があります。 ・1月1日の曜日 ・当日の曜日 ・1月1日から当日までの日数 その3つから計算を行います。 曜日の判定はゼラーの公式を使用すれば求まります。 注1:使用時は3月1日を年の初めにしていますので補正が必要です。(うるう日が年の最終日になるようにしています。) 注2:ガウス記号(数値の切り捨て)を使用しています。 日数計算は各月の月数テーブルを用意し加算すれば良いでしょう。 うるう年の判定はゼラーの公式を組み込むのですから2月28日と3月1日の曜日を求め曜日が不連続ならうるう年と判定する方法があります。 (週数はNo.2でfuryfoxさんが回答している方法で求めてください。) 「ゼラーの公式」は検索されればありますよ。(なければ「万年カレンダー」で検索して下さい。) (参考URLはGoogleです。下記はGoogleでのゼラーの公式での検索にしてあります。コピーして使えます。(参考URLには長くて入りませんでした。)) http://www.google.co.jp/search?num=100&hl=ja&inlang=ja&ie=Shift_JIS&as_qdr=all&q=+%22%83%5B%83%89%81%5B%82%CC%8C%F6%8E%AE%22&lr= 参考になるでしょうか?
- 参考URL:
- http://www.google.co.jp/
- furyfox
- ベストアンサー率56% (58/103)
1月1日から求めたい日までの日数を計算して7で割った数値 を求めます。 それとその余剰(あまった7未満の端数)と1月1日の曜日から+1週するかどうか判定します。
素人がこんなこと書くのはおこがましいのですがプログラムといっても種類はたくさんあると思います。どんなものでやりたいのか書かないと回答がつくとは思えないのですが・・・。
補足
>プログラムといっても種類はたくさんあると思います。どんなものでやりたいのか書かないと どんなものでやるかというのは言語のことですか? 私が言っているのは、言語は何でもよく、 プログラムのロジックのアドバイスが欲しいのです。
補足
>その余剰(あまった7未満の端数)と1月1日の曜日から+1週するかどうか判定します。 余剰と1月1日の曜日をどのような判定により プラス1週するのでしょうか? ご教授願います。