皆もすなるQiitaといふものを、儂もしてみむとてするなり。
と言う訳で、こん**は!はなっち!です。
DateTime型ってのは、単に日付とか日時を格納して、.ToString辺りで文字列化して、ファイル名の一部にしてみたりって位しか使っていなかったんですが、業務要件によっては「年度のフォルダの中にファイルがあるんだよね」なんて言われてしまって。。。
ってのは、UiPath:本日の年度を得る方法で書いたネタ。
今回は、「半期毎でフォルダを分けているんだよね」「うちは四半期毎でまとめているんですよ」なんて言う場合に使うロジックのお話。
年度を求めるのには、.AddMonths(-3).Yearを使用すればいい。その際に月と言うのは、.Monthと言うメソッドがあるので、簡単に取得できる。
月が得られるって事は、その値が1~6だったら上半期(1H)、7~12だったら下半期(2H)。更に言うと、その値が1~3だったら第1四半期(1Q)、4~6だったら第2四半期(2Q)、7~9だったら第3四半期(3Q)、10~12だったら第4四半期(4Q)、になる訳で。
日付 | 年度 | 月 | 半期 | 四半期 | 月 / 3 |
---|---|---|---|---|---|
2020/03/01 | 2019 | 12 | 2 | 4 | 4 |
2020/04/01 | 2020 | 1 | 1 | 1 | 0.333333333333333 |
2020/05/01 | 2020 | 2 | 1 | 1 | 0.666666666666667 |
2020/06/01 | 2020 | 3 | 1 | 1 | 1 |
2020/07/01 | 2020 | 4 | 1 | 2 | 1.333333333333333 |
2020/08/01 | 2020 | 5 | 1 | 2 | 1.666666666666667 |
2020/09/01 | 2020 | 6 | 1 | 2 | 2 |
2020/10/01 | 2020 | 7 | 2 | 3 | 2.333333333333333 |
2020/11/01 | 2020 | 8 | 2 | 3 | 2.666666666666667 |
2020/12/01 | 2020 | 9 | 2 | 3 | 3 |
2021/01/01 | 2020 | 10 | 2 | 4 | 3.333333333333333 |
2021/02/01 | 2020 | 11 | 2 | 4 | 3.666666666666667 |
2021/03/01 | 2020 | 12 | 2 | 4 | 4 |
2021/04/01 | 2021 | 1 | 1 | 1 | 0.333333333333333 |
こんな感じ。
さて半期ルール(1~6を1、7~12を2にする)を求めるには、6で割ってやればよく、四半期だとしたら3で割ってやればよい。
ただ、小数点以下の値が出てきてしまうので、そこんとこを上手い事やらなければならない!
そんな時、役に立つのが**「三角関数や対数関数などの一般的な数値関数の定数と静的メソッドを提供する」Math クラスですね。
Mathクラスには、数学的な関数群を保有していて、今回は、「指定した数以上の数のうち、最小の整数値を返す」.Ceiling メソッド**を使用します。
Math.Ceiling(0.666666666666667)は、「0.666666666666667」より以上の、最小の整数値を返すので、「1」となりますね。
Math.Ceiling(2)は、「2」より以上の、最小の整数値を返すので、「2」となりますね。
※参考:似たような関数で、**「指定した数以下の数のうち、最大の整数値を返す」Floor **メソッドがあります。
※シーリングファン(天井に取り付ける扇風機)の「Ceiling」ですね。フロアランプ(床置きのランプ)の「Floor」ですね。
という訳で、半期を得るには、
左辺:半期(Int32)
右辺:CType(Math.Ceiling(計算日付.AddMonths(-3).month / 6), Int32)
四半期を得るには、
左辺:四半期(Int32)
右辺:CType(Math.Ceiling(計算日付.AddMonths(-3).month / 3), Int32)
おわりに
いかがでした?
DateTime型はExcelシート上の日付でフィルタリング範囲に使ってみたり、先の例のように業務で管理単位とするなど、様々なシーンで扱うことが多い型です。是非UiAthでのロボ開発の一助になればと思っています。
ありがとうございました!