1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

月度、年度取得アルゴリズム

Posted at

【目的】

年月日関連アルゴリズムの考察。

【前提】

大抵の環境、プログラム言語には年月日演算処理(ライブラリ、標準関数)が用意されている。
従って、例えば 日 + 1 は単純な足し算ではなく、その環境で用意されている標準関数を通して加算するものとする。

【月度の求め方】

仮に締め日を 20日とし、1月1日~20日は 1月度、1月21日~末日は 2月度とする。
月日から月度を求める方法は幾つか考えられる。
前述の仕様をそのままコードに起こせば以下になる。

if (月日の日 <= 20) {
    月度 = 月日の月;
} else {
    月度 = 月日の月 + 1;
}

しかし式で書けば以下のようにシンプル。条件分岐は不要。

月度 = (月日 - 20日 + 1ヶ月) の月;

【年度の求め方】

こちらはもっと簡単。

年度 = (年月 - 3ヶ月) の年;

【末日の求め方】

ついでに。こちらは有名か。

末日 = (年月日の翌月の1日) - 1日;

【アメリカ大統領選挙日のアルゴリズム】

アメリカの大統領選挙日は原則 11月の第1火曜日。
しかし、もしそれが 1日だと月初で色々とアレなので翌週の火曜日となる。
この選挙日が法律上、どのように定義されているかご存じだろうか?
それは以下。実に単純明快。

選挙の日 (アメリカ合衆国)

11月の第1月曜日の翌日の火曜日に設置される。

素晴らしい、素晴らし過ぎる。
単に「11月の第1月曜日の翌日」でも良い。
「翌日」であるから 1日はあり得ない。
月曜日の翌日は火曜日であることは自明。
このアルゴリズムの面白いところは、火曜日の定義なのに「火曜日」が含まれない(含めなくても良い)こと。
これが 150年も前に制定されているという。昔の人は頭が良かったんだねぇ(小並感)。
年月日アルゴリズムの良いお手本として記憶に留めたい。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?