C#に限らず、プログラミング言語にはDateDiff相当の関数が用意されているはずです。
Excelでは普通に加減算が可能ですが。
そして、結論を言ってしまうと、そういう関数がある場合、それを使うべきです。
日数の計算って、場合によってはとっても面倒くさいのでw
社内の勤務時間が変動するので、PCへのログイン時間から勤務時間だけを取り出して~みたいな単純な差分のみで終わらないものだったりするので、その時は臨機応変にやるしかないけど・・・
DateDiff関数って何?
ある二日間における日数が取得できます。
例えば、2017年01月01日~2017年12月31日だと365日になります。
こういった日数を返してくれます。
なぜ関数を使うべきなのか?
要は、面倒くさいんです。
日数の計算って。
例えば、うるう年。
うるう年の定義って、パッと言えますか?
うるう年とは、
(1)西暦年号が4で割り切れる年をうるう年とする。
(2)(1)の例外として、西暦年号が100で割り切れて400で割り切れない年は平年とする。
(1)と(2)を満たす年になります。
国立天文台(NAOJ)のページより。
https://www.nao.ac.jp/faq/a0306.html
先に例としてあげた
「2017年01月01日~2017年12月31日」の日数を計算しようとする場合。
2017年が(1)と(2)の条件に当てはまるかどうかを判定させる必要があります。
1年は365日だろっていうのでごり押しは出来ないんです。
大学の情報課とかだとプログラミングの授業とかでうるう年判定のプログラムを組んだりするかもしれませんね。
うるう年だけじゃない
当然ですが、考慮すべきはうるう年だけではありません。
月ごとの日数も違います。
うるう年は2月の日数が28日から29日になります。
他の月も、6,9,11月は30日。
1,3,5,7,8,10,12月は31日になります。
これらを全て考慮したうえで引き算のプログラムをする必要があります。
正直めんどいw
さっきの例では、丸1年でした。
これが、複数年になると
- うるう年は何年含まれるか
- 対象の月は2月かどうか
- 対象の月は30日か31日か
を考慮したうえで、年数の引き算を行い日数に変換するのに加え、月(12ヶ月単位)と日(28,29,30,31日のどの月か)の筆算みたいなことをすることになります。
大学でプログラムを始めた時に課題でやらされたんですが、面倒くさかったw
まとめ
用意されてるならそれを使った方がいいってだけの話です。
今回、プログラム上の処理で、複数の日付の前後判定を6項目の組み合わせで、計15パターン×取得データ件数分やる必要があったため、日付関連の関数を眺めてて、学生時代を思い出してしまったw
テキストベースでデータもらったから、ちょっちメンドかった。
テキストをフォーマット変更して日付として扱えばいいだけの話なんだけど。