C#で日数計算を行うのに、DateDiff関数を使う以外の方法。でも、ぶっちゃけ関数使った方が早いし正確だよ。

投稿日:

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

テキストベースでデータもらったから、ちょっちメンドかった。
テキストをフォーマット変更して日付として扱えばいいだけの話なんだけど。







-C#

関連記事

SyntaxHighlighter EvolvedっていうWordPressのプラグインを使ったら、楽にソースコードを表示できた。

SyntaxHighlighter Evolvedっていうプラグインを使って、コードの表示を楽にしてみた。 C#で正規表現が使えたらな〜って時は以外と多いので、ちょっと正規表現を頑張って使ってみた。 …

C#:ソースコードのブロック化は必要?

こんにちは、ブロック化の必要性が理解できないSEもどきですw 皆さんは使ってますか? と、さも開発職の人がこのブログに来てるような書き出しですが、個人的に、このブロック化、使いづらいんですよね。 上手 …

Excelでシートをコピーする時に、「名前が既に存在します。」と言われるのを回避して、Excel出力を早くしたい。

結論から書いてしまうと、名前の重複を削除しても、Excelの出力は別に早くならなかった。 早くなるという意味だと、手動でシートをコピーした時に、いちいちダイアログの対応をしなくて済むので、自分で作業し …

[C#]systemcolorを使う

ボタンとかを作成した時に、BackColorとかにデフォルトで設定される色を変更したいけど、何かのアクション以外は、デフォルト職を使いたい。 って時に多分使える。 SystemColorsクラス(Mi …

DLLのプロパティのブロック解除をして、ダウンロードしたプログラムを起動出来るようにする。ダウンロードしたプログラムが実行できない時の対処法。

よくありますよね・・・ 予期せぬエラーってなんだよ(`・∀・´) 特にお客さんの目の前で「デンッ!!」っていうエラー音と共に表示された時の微妙な空気感がたまりません (╹◡╹) (^ω^) :(;゙゚ …


カテゴリー