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.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も利用場面によっては気をつけないといけないようですね。
ありがとうございました。
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なのかなと
補足に入れた修正案は日曜日で計算させるとだめでした。
教えて頂いた方法できちんと計算されるようになりました。
ありがとうございました。
ということは、今回のもののように他にも日本式に修正してやらないと行けないものがあるのでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- Visual Basic(VBA) 今日の日付が過ぎたらその行を削除したい 1 2023/04/01 20:06
- 英語 "this day"が当日か今日を表すのかの使い分け方等について 5 2023/08/08 14:29
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- 宇宙科学・天文学・天気 仙台で積雪量が増えたのに降雪量や天気概況には雪が降らなかった観測結果が出ることが最近多くなっている。 1 2023/02/01 19:16
- その他(プログラミング・Web制作) python 気象データの取得 2 2023/06/20 23:54
- Visual Basic(VBA) ExcelのVBAでシフト表を作っていますが、バグが出て困っています 2 2022/09/13 11:33
- Visual Basic(VBA) 【再投稿】VBAのシフト表でバグが出て困っています 3 2022/09/24 08:29
- Visual Basic(VBA) 【VBA】先月分の取得ができない理由が分かりません。 2 2022/04/24 11:16
- 先物取引 日本国債先物のCFD取引について 1 2023/08/04 18:09
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
前日の日付取得するには?
-
Perlでsprintf("%02d",$month)...
-
1桁の日付に0を付ける
-
Application.ScreenUpdating = ...
-
JSONで文字列が長い時
-
formで特定のinputを送信しない...
-
<SELECT>タグの折り返し
-
16進の10進変換について
-
実行時エラー 3020の対策
-
文字の横にプルダウンを表示さ...
-
デ-タテ-ブルの内容での更新...
-
セレクトメニューで2つの項目...
-
数値英単語変換
-
セレクトボックスのselected属...
-
複数列を持ったリストボックス...
-
selectタグ内の特定のoptionの...
-
【メモリ不足で落ちる(python)】
-
STLのlistで重複するものだけを...
-
【至急!!!】python言語で本を見...
-
パイソンのクラスについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Perlでsprintf("%02d",$month)...
-
1桁の日付に0を付ける
-
日齢計算プログラム
-
Perlの日付の比較に関して
-
当日の日付をプルダウンメニュ...
-
Cookieの有効期限について
-
CSVファイルに出力
-
日付の差分の求め方(日、分)
-
うるう年の出し方
-
Schemeのプログラミング うる...
-
Perlで60進数を作りたい
-
PHPのstrtotimeのようなものあ...
-
2つの日付・時間の差分を求め...
-
a shower.
-
日付範囲をの連番と月末を取得
-
体重が3kg増える/減る の英語...
-
C言語でのPICプログラミング
-
前日の日付取得するには?
-
ソースの詳細を教えてください。
-
PerlからMysqlに接続してデータ...
おすすめ情報