プロが教える店舗&オフィスのセキュリティ対策術

X月Y日がZ曜日なのは西暦何年かをだすにはどうすればいいのでしょう?

A 回答 (7件)

曜日の算出はツェラーの公式で算出すれば、あとは#1さんのご回答をコーディングするのみで1582年10月15日(金)以降対応となります



ツェラーの公式
http://easycgi.xrea.jp/tips/perl/zeller.htm

んでコーディングしてみました。
### ex. 1583年から2100年までで、10月10日が月曜日となる年は?
$mon = 10;
$day = 10;
$j = 0;##カウンター
for( $i=1583; $i<=2100; $i++){
if( $mon<3){$year = $i-1; $month=$mon+12;}else{$year=$i;$month=$mon;}
$week = ($year + int($year/4) - int($year/100) + int($year/400) + int((13*$month + 8)/5) + $day) %7;
if ( $week == 1 ){
$j ++;
print "$i,";
}
}
print "<br>$j回ありました.";
### result 75回、ちゃんと今年も入っていたから計算間違いはないはず。
前後を適宜補って実行してみてください
    • good
    • 0
この回答へのお礼

ツェラーの公式っていうのがあるんですね。これを使えばなんとかできそうです。
いろいろと詳しくありがとうございました。

お礼日時:2005/08/27 22:48

No6です。


計算してみましたがだめでした。
$yearの範囲が限られてくるみたいでつかえません。
わすれてください。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。

お礼日時:2005/08/27 22:51

>1月1日が土曜日なのは西暦何年かを求めるときはどうすればいいのでしょうか?



これでいいのかな??
間違ってたら誰かが直してくれると・・

use Time::Local;

my $time = timelocal($sec,$min,$hours,$mday,$mon,$year);

my $wday = (localtime $time)[6];
print "wday -- $wday\n";

foreach文などで、$wdayが6(土曜日)になるまで、$yearの年数を変更してループさせればいいのではないでしょうか??

参考URL:http://cocohome.hp.infoseek.co.jp/cocohome/l_nis …
    • good
    • 0

ただし、1900/1/1 以前は対応していません。



この項目「ユーザー設定」で、西暦を和暦にも簡単に書き換えられます。
    • good
    • 0

エクセルだと簡単に出ますよ。



たとえば、2000年1月1日は何曜日かを調べるには、2000/1/1 と入力します。そして、上の方に「書式(o)」というのがありますから、それをクリックします。続いて「セル」-「表示形式」-「日付」-「2001/3/14 水曜日」とクリックしていき、最後に「OK」をクリックすれば、2000年1月1日 土曜日」と表示が変わります。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
でも、それは年月日から曜日をもとめる場合ですよね?
すいません、質問の仕方がまずかったですね。。。
例えば1月1日が土曜日なのは西暦何年かを求めるときはどうすればいいのでしょうか?

お礼日時:2005/08/27 18:28

X月Y日がZ曜日というのは、たくさん答えがあるので、


もう少し絞ってください。
例えば、元年から今までとか一番近い未来でとか
    • good
    • 0
この回答へのお礼

なるほどそうですね・・・
では、条件に当てはまる一番近い過去の西暦はどうやって求めればいいのでしょうか?

お礼日時:2005/08/27 18:32

Perlに関しては無知ですが・・・ロジックなら分かります。



ただ、関数も当然しらないのでご容赦を。
まず、年月日が分からないと曜日は出しようがないので、
年(西暦)の幅を決めます。

その西暦(i)の幅で、ループさせます。
ループ内において、i年X月Y日の曜日を出します。
その曜日がZ曜日ならば、iを予め用意した配列に入れます。
ループ終了後に、配列にある全ての西暦が結果です。

どうですかねぇ。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
なるほど、それならできそうですね。

お礼日時:2005/08/27 19:27

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!