もう一人のY君

主にiPhoneのショートカットアプリのレシピやTipsなどを書いています. たまに数学の記事も書きます.

もう一人のY君 MENU  MENU

【ショートカット】入力した日時の曜日を求める【ツェラーの公式】

181110_50

 今回はツェラーの公式を用いて曜日を求めるショートカットを作ってみます.

 

ショートカット

ショートカット

  • Apple
  • 仕事効率化
  • 無料

※価格は記事執筆時のものです. 現在の価格はApp Storeから確認ください.

 レビュー時のバージョン : v2.1.1

 

スポンサーリンク

 

 

ツェラーの公式

 ツェラーの公式は日時の曜日を求める公式として一時期映画を通じて有名になりました.

 手計算でももちろん可能ですがショートカットに任せれば計算違いもありません.

 

ツェラーの公式 - Wikipedia

ツェラーの公式(ツェラーのこうしき、 英: Zeller's congruence)とは 西暦( グレゴリオ暦または ユリウス暦)の 年・ 月・ 日から、その日が何 曜日であるかを算出する公式である。 クリスティアン・ツェラー ( Christian Zeller ) が考案した。 ユリウス通日 を求め、そこから曜日を求める計算と本質は同じである。

 

 計算式はWikipediaにあるものを参考にしました.

 1月と2月についてはそれぞれ前年の13月, 14月という扱いにすることに注意します.

 

{ \displaystyle h\equiv d+\left[ \frac{26(m+1)}{10} \right]+Y+\left[ \frac{Y}{4} \right] + \Gamma\pmod 7  }

{ \displaystyle \Gamma = -2C+\left[ \frac{C}{4} \right] }

{ \displaystyle C = \left[ \frac{y}{100} \right] }

{ \displaystyle Y\equiv y\pmod {100} }

 

 上記によって { \displaystyle h } を求め, 例えば { \displaystyle h } が { \displaystyle 1 } なら日曜日, { \displaystyle 2 } なら月曜日…となります.

 

 

フロー

181110_51

 まず「入力を要求」で「日時」を入力させます.

 公式では年月日をバラバラに扱うため, 一度「テキスト」に移し, 「テキストを分割」でバラして変数として代入しておきます.

 

 

181110_52

 先程指摘した通り, 1月と2月についてはそのままでは扱えないため, 変数を1つ余分に用意し, 演算用として使います.

 1月の場合は13に置き換え, 年数の変数も1つ減らします.

 2月の場合は14に置き換え, 同じく年数を1つ減らします.

 

 

181110_53

 ここまでが1月, 2月に対応した年, 月の内部変更になります.

 

 

181110_54

 最後に「テキストを分割」3行目を取り出して日数を取得します.

 

 

181110_55

 準備が整ったので必要な記号式から順番に計算します.

 画像ではまず { \displaystyle \left[ \frac{26(m+1)}{10} \right] } を計算しています.

 

 

181110_56

 続いて { \displaystyle Y } および { \displaystyle \left[ \frac{Y}{4} \right] } を計算します.

 ここで使用している合同式の関数は絶対値最小剰余を返すため, 結果が負数の場合法 { \displaystyle 100 } を足すことで正値最小剰余に直しています.

 

 

181110_57

 続いて { \displaystyle C } を計算します.

 

 

181110_58

 最後に { \displaystyle \Gamma } を計算します.

 これで道具は揃いました.

 

 

181110_59

 前述までに用意した各値 { \displaystyle d,\,\left[ \frac{26(m+1)}{10} \right] }{ \displaystyle ,\,Y,\,\left[ \frac{Y}{4} \right] }{ \displaystyle ,\,\Gamma } を足し合わせます.

 

 

181110_60

 結果を法 { \displaystyle 7 } で整除します.

 やはり今回用意した合同式の関数は絶対値最小剰余で返すため, 結果が負数の場合は法である { \displaystyle 7 } で足します.

 これで { \displaystyle h } が確定しました.

 

 

181110_61

 「テキスト」アクションを用いて元の日付を構成します.

 「入力を要求」の結果をそのまま利用すると, 時刻までついてきてしまうための措置です.

 その後先程得られた { \displaystyle h } の値に応じて結果を表示します.

 

 

181110_62

 7つの曜日すべてに対して書き終えれば完了です.

 

 

実行

181110_63

 実行して結果が正しいことを確かめます.

 

 

181110_64

 1月, 2月の処理も問題なさそうです.

 

 

 アクション数は104と多いですが, 一つ一つは負担の少ないアクションのため処理時間は1秒とかかりません.

 

 今回用いた公式はグレゴリオ暦に遵守したもののため, Wikipediaにある通り西暦1582年以降をサポートしています.