
Date::Calcのレシピに掲載されていた「現在が第何週にあるかを計算するには」をチェックしたのですが、今日4/9に以下の計算をさせると$weekが「3」となり「第三週」になってしまいます。
use Date::Calc qw(:all);
($year,$month,$day,$hour,$min,$sec)=Today_and_Now();#現在日時
$dow = Day_of_Week($year,$month,$day);#現在の曜日
$week = int(($day+Day_of_Week($year,$month,1)-2)/7)+1;#現在は当月の第何週か
print "Content-type: text/html\n\n";
print "<html><head></head><body>";
print "today:$year,$month,$day\n";
print "week:$week\n";
print "</body></html>";
exit;
以下のように日時を数値で入れても同じですが、これは掲載されているレシピのミスなのでしょうか?
それとも、Date::Calcが月曜日を「1」として計算するから、第三週となってしまうのでしょうか?、これを修正するにはどのようにしたら良いのでしょうか?
$week = int((9+Day_of_Week(2007,4,1)-2)/7)+1;
Date::Calc:日本語訳
http://perldoc.jp/docs/modules/Date-Calc-5.3/Cal …
No.1ベストアンサー
- 回答日時:
キリスト教圏の欧米では、1週間は「月火水木金土日」です。
旧約聖書には「神は月~土の6日間で世界を創り、7日目の日曜日を安息日とした」と書いてありますからね。
なので「Day_of_Weekは、月曜日を1、火曜日を2…日曜日を7で返す」と言う仕様になっています。
欧米式カレンダーでは、4月は
月 火 水 木 金 土 日
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
って感じです。
>今日4/9に以下の計算をさせると$weekが「3」となり「第三週」になってしまいます。
そうなるのが(欧米式で言えば)正しいです。欧米式で言えば4/9は第三週の週頭ですから。
日本式に、1週間を「日月火水木金土」にして考えるには、Day_of_Weekの部分を「日曜日を1、月曜日を2、火曜日を3…土曜日を7」になるように書き換えます。
$week = int(($day+Day_of_Week($year,$month,1)-2)/7)+1;#現在は当月の第何週か
を
$week = int(($day+(Day_of_Week($year,$month,1)%7)-1)/7)+1;#現在は日本式で当月の第何週か
に変えて下さい。
この回答への補足
原文チェックしていないのですがレシピのカレンダーは日曜日頭となっていました。月曜日=1は認識しています。
また、以下のように修正しましたら正常に計算されるようになりました。
$week = int(($day+Day_of_Week($year,$month,$day)-2)/7)+1;
が、これでOKなのかなと
補足に入れた修正案は日曜日で計算させるとだめでした。
教えて頂いた方法できちんと計算されるようになりました。
ありがとうございました。
ということは、今回のもののように他にも日本式に修正してやらないと行けないものがあるのでしょうか。
No.3
- 回答日時:
ついさっき原文を見てたところなので参考までに。
* "$dow = Day_of_Week($year,$month,$day);"
This function returns the number of the day of week of the given date.
The function returns "1" for Monday, "2" for Tuesday and so on until
"7" for Sunday.
Note that in the Hebrew calendar (on which the Christian calendar is
based), the week starts with Sunday and ends with the Sabbath or
Saturday (where according to the Genesis (as described in the Bible)
the Lord rested from creating the world).
In medieval times, Catholic Popes have decreed the Sunday to be the
official day of rest, in order to dissociate the Christian from the
Hebrew belief.
Nowadays, the Sunday AND the Saturday are commonly considered (and
used as) days of rest, usually referred to as the "week-end".
Consistent with this practice, current norms and standards (such as
ISO/R 2015-1971, DIN 1355 and ISO 8601) define the Monday as the first
day of the week.
元々がキリスト教の習慣からというのはよいとして、
ISOという国際的な規格でも月曜始まりが基準のようです。
ISO 8601 - Wikipedia
http://ja.wikipedia.org/wiki/ISO_8601
年と週と曜日
YYYY-Www-D と表記する。ww は年内の暦週の番号で、年の第1週は 01、最終週は 52 または 53 となる。第1週は事実上1月4日を含む週に等しい。D は曜日を表し、月曜日が 1、日曜日は 7 である。
ありがとうございます。
~このシステムは「月火水木金土日』というISO規格で運用しています。~
等と注釈つけてしまうのもアリ?なんでしょうかね。
No.2
- 回答日時:
>原文チェックしていないのですがレシピのカレンダーは日曜日頭となっていました。
いえ、レシピ(訳文)は月曜頭になっています。
>5.) 現在が、第何週目にあるかを計算するにはどうしたらいいですか?
>例:
> 1998年4月
> Mon Tue Wed Thu Fri Sat Sun
>ということは、今回のもののように他にも日本式に修正してやらないと行けないものがあるのでしょうか。
その通りです。「週の番号を返す」とか「同じ週の週頭を返す」とか「1年の週の数を返す」など、括りが「週」になっている関数や例文は、すべて「月曜始まりになっている」と考えて下さい。
レシピのカレンダーの件,申し訳ないです。単なる私のとんちんかんな記載ミスです。
Date::Calcも利用場面によっては気をつけないといけないようですね。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
INDIRECT 横に再度抽出したい
-
perlについての質問
-
テキストファイルで提出とは?
-
逆スラッシュを使わずにメタ文...
-
perl の open について教えてく...
-
Perl言語について。
-
ファイルをディレクトリ分配の...
-
アルファベットに付いて質問し...
-
#!/usr/bin/perlで書きだしたCG...
-
Perlのエラーについてご教授く...
-
perlのflock関数でロックをかけ...
-
AI sisterとは、偽物の人ですか?
-
bashスクリプト
-
ファイルアイコンの左下に緑の□...
-
perlプログラミング 空白行削除
-
perlでリテラル値はメモリにど...
-
perlで2次元配列をサブルーチ...
-
Perlで時間の計算
-
perlについて
-
perlのrequireの動き方について...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
おすすめ情報