Automation Anywhereで「ツェラーの公式」で曜日を求めてみた！

はじめまして、Automation Anywhereをお勉強中のものです。
初投稿させていただきます！

#ツェラーの公式で曜日を求めようと思った経緯
Automation Anywhereは、日進月歩でバージョンアップされて使い易くはなっていると思いますが、まだ存在しない機能などあると思います。

今回、私が業務で営業日判定を組み込みたいと考えたときに、現在日時が何曜日であるのか、その処理を作ろうとしたところ、それらしいパッケージ、アクションが見当たりませんでした。

同僚の方から曜日を計算するには「ツェラーの公式」から求められるという事を伺い、この公式で曜日を求める処理を作ってみました。参考にした「ツェラーの公式」にした情報は、以下サイトを元にしております。

http://www.koshi-h.ed.jp/wp-content/uploads/2018/01/H29_12_zeller.pdf

#ツェラーの公式　(※公式を抜粋してます)
![ツェラーの公式.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1477705/ea95327d-d183-9a64-9563-36e2d9a12a9c.png)

#年の始まりを3月と考える理由
暦についての歴史から昔は農業をしない冬の期間には月が割り当てられず、年の初めを現在の3月としていたようです。(以下サイトを参考にしています。)

https://www.nao.ac.jp/faq/a0307.html

**ロムルス暦(紀元前8世紀頃)**
月は10しかなく、農業をしない冬の期間（現在の1月、2月）は月日が割り振られていなかった。1年の始まりは現在の3月にあたる
**ヌマ暦(紀元前1世紀頃)**
ロムルス暦ではなかった冬の期間の月日に、1月と2月が追加され1年が12か月となった。1年が355日と定められ、閏月で季節がずれないように調整していた。
**ユリウス暦(紀元前45年頃)**
ヌマ暦では正しく閏月を挿入できず季節がずれてしまったことにより、ユリウス・カエサルにより1年を365日と定め、4年に一度の閏年を366日とした。
**グレゴリオ暦(1582年)**
西暦325年にニケア宗教会議で「春分の日」が3月21日と決められ日付が固定されたが、16世紀には春分の日が現在の3月11日までずれてしまったとこにより、ユリウス暦1582年10月4日の翌日をグレゴリオ暦1582年10月15日とした。1年を365日と定め、4年に一度閏年とし、400年の間で97回とした。
※日本では、明治5年12月2日の翌日から（グレゴリオ暦1873年1月1日）明治6年1月1日とした
#使用したAutomation Anywhereのバージョン
Automation360
Community Edition ビルド 11429
Bot エージェント バージョン 21.116
#曜日算出方法手順
1. 曜日算出する現在日時をシステム日時から取得
2. 年の始まりを3月と考える処理
3. 閏年対応(西暦を4で割った商を求める)…①
4. 閏年対応(西暦を100で割った商を求める)…②
5. 閏年対応(西暦を400で割った商を求める)…③
6. 月の日数を求める対応(13M+8を5で割った商を求める)…④
7. 合算する(合計=西暦+①-②+③+④+日)
8. 合計を7で割った商を求める
9. 合計から「7と合計を7で割った商を掛け合わせて算出した数」を引いて「余り」を求める
10. 前で求めた「余り」が曜日に対応する表から曜日を割り出す


#処理全体
![処理全体.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1477705/9d2cb3da-cc10-4a6b-d3f6-d31fb7d92510.png)
#変数全体
![変数全体.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1477705/c241ff0b-edff-46dd-47fa-837ac2235b15.png)
#1月、2月の対応(年の始まりを3月と考える処理)
1月、2月の場合は、前年の13月、14月と考える
![年の始まりを3月と考える処理.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1477705/e9551cf3-8bec-d281-85d8-c21101e661f7.png)
#「余り」が曜日に対応する表から曜日を割り出す
![前で求めた「余り」が曜日に対応する表から曜日を割り出す.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1477705/ae0f0d0a-2de8-e3db-8d88-1659c35f138c.png)
#曜日に対応する表
![曜日に対応する表.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1477705/91f8e8d7-6f35-038c-8392-da146762e4e0.png)
#現在日時2021/12/16で実行した結果
![実行結果.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1477705/eb3d75cc-061b-950c-8ea6-5e26e3061887.png)
#テストするためにステップを以下の通り変更
変更前：システム日時を「yyyy/MM/dd」形式で文字列型に変換する
変更後：文字列型で「yyyy/MM/dd」形式で日時型に格納し、日時型を文字列型に変換する
![色々テスト.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1477705/bb66376a-7cba-a658-98ce-3dcb1b53f5f3.png)
以下テスト検証結果です。
![色々テスト結果.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1477705/1c42a49c-8794-66d2-e4df-e60e7ebeae64.png)
#Tips
Automation Anywhereの数字パッケージには、ある数字をある数字で割った「商」や「余り」を算出するためには、以下手順が必要でした。

**商の場合**
1. [数字:代入]である数字(A)をある数字(B)で割る式を数字型に格納する
2. [数字:文字列に変換]で「小数点以下の桁数」を0に設定して文字列型に変換する
3. [文字列:数字に変換]で整数となった文字列を数字型に変換する

**余りの場合**
1. 前の手順で「商」を求め数字型に格納する
2. ある数字(A:割られる数字)から、ある数字(B:割る数字)と「商」を掛けた結果の数字を差し引き数字型に格納する

#最後に
今回初めて投稿させていただきました。記述方法など、まだまだ分からない点があり、読みにくい部分があったと思います。今後、新たな投稿するにあたり、記述方法も勉強してより分かりやすい記事となるように精進してまいります。何かアドバイスございましたら、返答いただけると幸いです。

最後まで読んでいただきまして、ありがとうございました。